我是Prolog的新手。 我在大学就读AI课程,所以我们不能使用高级的Prolog功能:只是简单的事实和超简单的规则。
我在将这两句话转换为Prolog条款时遇到了一些麻烦:
我设法写了第二个这样的:
loves(X, Y) :- animal(A), \+killed(Y, A).
但是即使是这个,我也很确定它不太正确:这个规则告诉每个没有杀死动物的人都被所有人所喜爱,这与我想表达的相反。 / p>
任何帮助?
答案 0 :(得分:1)
您是否研究过谓词演算,量词的逻辑?
在Prolog中表达这两个陈述的真实存在问题。第一个假设,对于每个喜欢“所有动物”的Y,存在爱X的人,但没有告诉我们如何“构建”X.第二个表达对否定声明的知识,“任何杀死动物的人没有人喜爱。“
有可能你可以拥有表达所有个体知识的事实,他们爱谁,爱所有动物,杀死动物。然后你可以编写查询来检查1,2是否保持。这与试图通过规则和事实来断言1,2的真实性不同。
答案 1 :(得分:1)
你用相反的方式改写了你的问题。好。
但你表示它是所有其他条件的分离。你应该改为定义
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.