我在Prolog中遇到了这个事实的例子:
vertical(line(point(X,Y),point(X,Z))).
这对我来说似乎很奇怪,因为我认为事实总是只包含一个仿函数和原子(或原子结构),而上面的代码似乎更像一个规则(如果....那么直线是垂直的)。
这让我很困惑,我现在正试图找出包含变量和规则的事实与应该使用其中一个或另一个的事实之间的区别。有人请帮帮我! :S
另外,我如何使用规则编写此代码?
答案 0 :(得分:5)
从技术上讲,是的,您可以在事实中使用变量,这是常见的做法。虽然,我想他们可能会成为规则。 :)
让我们考虑你的例子:
vertical(line(point(X,Y),point(X,Z))).
这是表达以下规则的隐含方式:
vertical(line(point(X1,Y), point(X2,Z))) :- X1 = X2.
这当然会发出关于Y
和Z
是单例变量的警告。由于您不关心它们是什么,因此您可以使用_
并按如下方式表达规则:
vertical(line(point(X1,_), point(X2,_))) :- X1 = X2.
或者,简单地说:
vertical(line(point(X,_), point(X,_))).
"事实"的一个定义与"规则"本文在Facts, Rules, and Queries上给出了这一点。根据这个定义,上述内容可以被视为一个事实,因为它适用于所有X
。