根据我在uni的硬件需求,我需要将一些Horn子句转换为Prolog,但是我不知道该怎么做。我找到了一些指南,但是他们仅凭一个事实就描述了如何做。那么,您能给我一个简短的例子吗?
例如,约翰美丽而富有
我们可以将其转换为:not(Beautiful(John))^ not(Rich(John)),这是Horn子句对吗?那么如何将其翻译成Prolog?
另一个例子每个人都爱一个人。 Horn子句:∀X∃YLoves(X,Y)如何在Prolog中实现?
提前Thx
最佳答案
对于第一个问题
john :- beautiful, rich.
或者有类似的东西:
beautiful(john).
rich(john).
与查询:
beautiful(X),rich(X).
基本上,序言中的每个规则都是一个号角子句。
根据定义,逻辑程序是由Horn子句组成的程序。
在序言中,当您有一条规则声明为:
a1(X):-a2(X),a3(X),...,an(X)
是horn子句,因为它被翻译为:
a1 or not a2 or not a3 or ... or not an
因此,对于第二个问题:
在序言中,当您定义规则时就暗含了通用量词
不影响序言子句。
因此,您需要否定句子,以便可以转换存在量词
成为通用的
所以你有了:
∀X∃YLoves(X,Y)
然后您否定:
∀X ∀Y false <- Loves(X,Y))
转换为:
:- loves(X,Y).
关于prolog - 霍恩条款到序言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22439171/