Prolog规则结构及其区别

时间:2015-01-25 19:16:30

标签: prolog rules

我对我的Prolog规则的编写方式感到困惑。

让我们说,我想说只有鸟才能飞。

我的规则应该写成

fly(X):- bird(X).

bird(X):-fly(X).

他们之间的意义有什么不同? 此外,我是否需要明确说明如果实体不是鸟,它就不会飞?

另外,如果我想说... 我可以去动物园或图书馆。动物园或图书馆,但不是两者。应该怎么样? 我假设它是..

go_there(X,Place):-
   go_there(X,zoo),
   go_there(X,library).

请温柔地对待我,因为这是我第一次尝试使用Prolog编程!谢谢!

1 个答案:

答案 0 :(得分:1)

要说只有鸟可以飞可以表示为,如果一个生物可以飞行,那么它必须是一只鸟。根据这个简洁短语的语义,它可能会留下一些无法飞行的鸟类的可能性。

因此,谓词:

fly(X) :- bird(X).

不正确。这就是说,如果X是一只鸟,那么X可以飞,这不是只有鸟可以飞所说的逻辑。

对Prolog的更直接的翻译将是:

bird(X) :- fly(X).

它说, XX可以飞的鸟(或如果X可以飞,那么{{1}必须是一只鸟)。

的排他性将由于任何其他谓词的缺席而发生,该谓词表示某些其他生物可以飞行,例如:

X

关于第二个问题:

bee(X) :- fly(X).

这就是说,如果go_there(X,Place):- go_there(X,zoo), go_there(X,library). 进入动物园, X会转到PlaceX会转到图书馆。这听起来并不像, X可以去动物园,也可以去图书馆,但不能同时去。我可以这样说:

X

这些说go_there(fred, zoo). go_there(fred, library). 可以去动物园,或fred可以去图书馆。

然后如果我查询:

fred

go_there(fred, Place). 会产生两种不同的结果:

Place

要说Place = zoo Place = library 可以转到其中一个,但不能同时转到两者,需要进行限定。这是否意味着在X无法同时执行的特定时间段内?或者它是否意味着一旦X进入一个,那么它永远不会去另一个?上述谓词是否满足第一个案例尚不清楚。这取决于具体情况。在任何一种情况下,您都需要添加一些Prolog逻辑来处理时间方面,或者,如果"永远"如果您需要随机选择其中一个,那么从那一点开始,该选择将保持不变。

<小时/> 如果您要回答其他评论,请说:

X

您选择通过仿函数go_there(human(fred), zoo). go_there(human(fred), library). 代表某人(例如fred)作为人类。为了将human/1指定为人类,您必须使用fred携带仿函数,并且只要在正在查找的谓词中使用fredfred human(fred) {1}}成为人类的成员。如果你想询问fred是否会去动物园,遗憾的是fred会失败,因为go_there(fred, zoo).是人类的事实需要成为代表{{1}的原子的一部分}。您必须查询fred。要确定fred是否为人,您会查询go_there(human(fred), zoo),这也有点尴尬。

分离关系更清晰:

fred

现在,如果您查询go_there(human(fred), _).,则会得到&#34; true&#34;。如果您查询go_there(fred, zoo). go_there(fred, libary). human(X) :- go_there(X, zoo). human(X) :- go_there(X, library). ,您也会得到&#34; true&#34;。