根据我在HW的需要,我需要将一些Horn条款转换为Prolog,但我无法弄清楚如何做到这一点。我找到了一些指南,但他们只用一个事实描述了如何做到这一点。那么你能给我一个关于如何做到这一点的简短例子吗?
约翰是美丽而富有的
我们可以将它转换为:not(Beautiful(John))^ not(Rich(John))这是一个Horn子句吗?那么如何将它翻译成Prolog?
另一个例子每个人都爱一个人。 Horn子句:∀X∃YLoves(X,Y)如何在Prolog中实现?
提前谢谢
答案 0 :(得分:1)
关于你的第一个问题
john :- beautiful, rich.
或者有类似的东西:
beautiful(john).
rich(john).
查询:
beautiful(X),rich(X).
基本上prolog中的每个规则都是一个角项。 根据定义,逻辑程序是一个由Horn条款组成的程序。 在prolog中,当您有一个声明为:
的规则时a1(X):-a2(X),a3(X),...,an(X)
是一个号角条款,因为它被翻译为:
a1 or not a2 or not a3 or ... or not an
所以对于你的第二个问题: 在prolog中,当您定义规则时,隐含了通用量词 不影响prolog条款。 所以你需要否定你的句子,这样你就可以改变存在量词 一个普遍的。 所以,你有:
∀X∃YLoves(X,Y)
然后你否定:
∀X ∀Y false <- Loves(X,Y))
转换为:
:- loves(X,Y).