Horn Clause to prolog

时间:2014-03-16 15:59:39

标签: prolog

根据我在HW的需要,我需要将一些Horn条款转换为Prolog,但我无法弄清楚如何做到这一点。我找到了一些指南,但他们只用一个事实描述了如何做到这一点。那么你能给我一个关于如何做到这一点的简短例子吗?

约翰是美丽而富有的

我们可以将它转换为:not(Beautiful(John))^ not(Rich(John))这是一个Horn子句吗?那么如何将它翻译成Prolog?

另一个例子每个人都爱一个人。 Horn子句:∀X∃YLoves(X,Y)如何在Prolog中实现?

提前谢谢

1 个答案:

答案 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).