首页 文章

基本的prolog规则创建

提问于
浏览
0

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

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

  • 每个爱所有动物的人都被某人所喜爱 .

  • 任何杀死动物的人都不会被任何人所爱 .

我不知怎的设法写了第二个这样的:

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

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

有帮助吗?

2 回答

  • 1

    你研究过谓词演算,量词的逻辑吗?

    在Prolog中表达这两个陈述的真实性存在问题 . 第一个假设,对于每个喜欢"all animals"的人来说,有一个爱X的人X的存在,但没有告诉我们如何"construct" X.第二个表达对否定陈述的知识,"Anyone who kills an animal is loved by no one."

    潜在地,你可以拥有表达所有个体知识的事实,他们爱谁,爱所有动物,杀死动物 . 然后你可以编写检查1,2 hold的查询 . 这不同于试图通过规则和事实来断言1,2的真实性 .

  • 1

    你用相反的方法改写了你的问题 . 好 .

    • X爱Y暗示B没有杀死C,C是动物 .

    但是你把它表达为所有其他条件的脱节 . 你应该改为定义

    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.
    

相关问题