在Prolog中使用变量在事实中是一种常见的做法吗?

Arm*_*ada 2 prolog

我在Prolog中遇到了这个事实的例子:

vertical(line(point(X,Y),point(X,Z))).
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪,因为我认为事实总是只包含一个仿函数和原子(或原子结构),而上面的代码似乎更像一个规则(如果....那么直线是垂直的).

这让我很困惑,我现在正在试图找出包含变量和规则的事实与应该使用其中一个或另一个的事实之间的区别.有人请帮帮我!:S

另外,我怎么能用规则编写这段代码?

lur*_*ker 5

从技术上讲,是的,你可以在事实上有变量,这是常见的做法.虽然,我想他们可能会成为规则.:)

让我们考虑你的例子:

vertical(line(point(X,Y),point(X,Z))).
Run Code Online (Sandbox Code Playgroud)

这是表达以下规则的隐含方式:

vertical(line(point(X1,Y), point(X2,Z))) :- X1 = X2.
Run Code Online (Sandbox Code Playgroud)

当然,这将给予警告有关Y,并Z是单变量.由于您不关心它们是什么,您可以使用_并表达如下规则:

vertical(line(point(X1,_), point(X2,_))) :- X1 = X2.
Run Code Online (Sandbox Code Playgroud)

或者,简单地说:

vertical(line(point(X,_), point(X,_))).
Run Code Online (Sandbox Code Playgroud)

"事实","规则" 和"查询 "一文中给出了"事实"与"规则"的一个定义.根据这个定义,上述内容可以被视为一个事实,因为它对所有人都是如此X.