我是Prolog的新手 . 我在大学就读AI课程,所以我们不能使用先进的Prolog功能:只是简单的事实和超简单的规则 .
我将这两句话转换为Prolog条款时遇到了一些麻烦:
-
每个爱所有动物的人都被某人所喜爱 .
-
任何杀死动物的人都不会被任何人所爱 .
我不知怎的设法写了第二个这样的:
loves(X, Y) :- animal(A), \+killed(Y, A).
但即使对于这个,我也很确定它不太正确:这个规则告诉每个没有杀死动物的人都被所有人所喜爱,这与我想表达的相反 .
有帮助吗?
2 回答
你研究过谓词演算,量词的逻辑吗?
在Prolog中表达这两个陈述的真实性存在问题 . 第一个假设,对于每个喜欢"all animals"的人来说,有一个爱X的人X的存在,但没有告诉我们如何"construct" X.第二个表达对否定陈述的知识,"Anyone who kills an animal is loved by no one."
潜在地,你可以拥有表达所有个体知识的事实,他们爱谁,爱所有动物,杀死动物 . 然后你可以编写检查1,2 hold的查询 . 这不同于试图通过规则和事实来断言1,2的真实性 .
你用相反的方法改写了你的问题 . 好 .
但是你把它表达为所有其他条件的脱节 . 你应该改为定义
并使用
killed_no_animal
作为所有其他谓词的必要条件: