【问题标题】:Prolog Rules (Predicates)Prolog 规则(谓词)
【发布时间】:2017-07-30 22:58:59
【问题描述】:

我是 Prolog SWI 的新手,你能帮我解决这个问题吗? 假设有一个数据库,其中包含谓词 like (person1, person2) 和 hobbies (person1, hobby)。现在,我如何设计一个规则,使系统根据他们的爱好来回答两个人是否有相同的喜好。

likes (john, jake).  
true 

【问题讨论】:

  • 先用普通语言写规则,不考虑Prolog。那会是什么? “因爱好而异”是什么意思?您的意思是确定两个人是否有相同爱好的规则吗?或者您是否正在寻找一个规则来定义两个彼此喜欢具有相同爱好的人?你的“喜欢”事实是一个方向吗? (如果 a 喜欢 b,那么 b 喜欢 a 是否也隐含真实?)
  • 这意味着两个人只是有相同的爱好而已。
  • 所以写一个规则,A likes B iff A has a hobby H and B has a hobby H
  • 我尝试过类似 checkhobby(A,B) :- likes(A,H), likes(B,H), dif(A,B)。
  • 您说要检查两个人是否有相同的爱好。但是您的checkhobby 示例甚至没有使用hobbies 数据。你在这里真正追求的东西有点令人困惑。这听起来就像您只需要阅读 Prolog 入门书籍的开头章节,或尝试 Prolog 教程。

标签: prolog


【解决方案1】:

终于,我做到了

hobby(harry,music).
hobby(harry,running).
hobby(jocker,swimming).
hobby(jocker,movies).
hobby(jocker,art).
hobby(curl,running).
hobby(curl,art).
hobby(curl,movies).

same_hobby(P1,P2) :-
        dif(P1,P2),
        hobby(P1,H),
        hobby(P2,H).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多