首页 文章

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

提问于
浏览
2

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

vertical(line(point(X,Y),point(X,Z))).

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

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

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

1 回答

  • 5

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

    让我们考虑你的例子:

    vertical(line(point(X,Y),point(X,Z))).
    

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

    vertical(line(point(X1,Y), point(X2,Z))) :- X1 = X2.
    

    这当然会发出关于 YZ 是单例变量的警告 . 由于您不关心它们是什么,您可以使用 _ 并按如下方式表达规则:

    vertical(line(point(X1,_), point(X2,_))) :- X1 = X2.
    

    或者,简单地说:

    vertical(line(point(X,_), point(X,_))).
    

    本文在Facts, Rules, and Queries中给出了"fact"与"rule"的一个定义 . 根据这个定义,上述情况可以被认为是一个事实,因为它对所有人来说都是如此 .

相关问题