基本的prolog规则创建

时间:2013-10-29 13:11:08

标签: prolog

我是Prolog的新手。 我在大学就读AI课程,所以我们不能使用高级的Prolog功能:只是简单的事实和超简单的规则。

我在将这两句话转换为Prolog条款时遇到了一些麻烦:

  1. 每个爱所有动物的人都被某人所喜爱。
  2. 任何杀死动物的人都不会被任何人所爱。
  3. 我设法写了第二个这样的:

    loves(X, Y) :- animal(A), \+killed(Y, A).

    但是即使是这个,我也很确定它不太正确:这个规则告诉每个没有杀死动物的人都被所有人所喜爱,这与我想表达的相反。 / p>

    任何帮助?

2 个答案:

答案 0 :(得分:1)

您是否研究过谓词演算,量词的逻辑?

在Prolog中表达这两个陈述的真实存在问题。第一个假设,对于每个喜欢“所有动物”的Y,存在爱X的人,但没有告诉我们如何“构建”X.第二个表达对否定声明的知识,“任何杀死动物的人没有人喜爱。“

有可能你可以拥有表达所有个体知识的事实,他们爱谁,爱所有动物,杀死动物。然后你可以编写查询来检查1,2是否保持。这与试图通过规则和事实来断言1,2的真实性不同。

答案 1 :(得分:1)

你用相反的方式改写了你的问题。好。

  1. X爱Y暗示B不杀C,C是动物。
  2. 但你表示它是所有其他条件的分离。你应该改为定义

    killed_no_animal(Y) :- forall(animal(A), \+killed(Y, A)).
    

    并使用killed_no_animal作为所有其他谓词的必要条件:

    loves(X, Y) :- killed_no_animal(Y), other predicate.
    loves(X, Y) :- killed_no_animal(Y), other predicate.