【问题标题】:In Prolog is the use of variables in facts a common practice?在 Prolog 中,在事实中使用变量是一种常见的做法吗?
【发布时间】:2014-10-24 18:03:01
【问题描述】:

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

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

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

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

另外,如何使用规则编写此代码?

【问题讨论】:

    标签: prolog


    【解决方案1】:

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

    让我们看看你的例子:

    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 上的这篇文章给出了“事实”与“规则”的一个定义。按照这个定义,以上可以被认为是一个事实,因为它对所有X都是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2012-10-12
      • 2021-01-20
      • 1970-01-01
      • 2021-11-27
      • 2013-11-20
      相关资源
      最近更新 更多