Prolog匿名变量



以下是我对Prolog变量的理解。

  1. 单个下划线表示匿名变量,每次出现时都像一个新变量。

  2. 像_W这样以下划线开头的变量名不是匿名变量。或者,Prolog内部生成的变量名,如_G189,不被认为是匿名的:

?- append([1,2],X,Y).
X = _G189
Y = [1, 2|_G189]

你能帮我理解吗?

顺便说一下,我从一些教程中得到了上面的例子,但是当我在sw - prolog版本6中运行它时,我得到以下内容:
?- append([1,2],X,Y).
Y = [1, 2|X].

感谢你。

变量

匿名变量_是唯一的变量,不同的出现表示不同的变量。其他以_开头的变量不是匿名的。不同的出现引用相同的变量(在相同的作用域中)。然而,像SWI这样的prolog会警告你,如果一个变量不是以下划线开头的,只会出现一次:

?- [user].
a(V).
Warning: user://1:9:
        Singleton variables: [V]

您必须将该变量重命名为_V以避免该警告。这有助于程序员更好地发现变量名中的错别字。在许多系统中还有更多这样的限制。

a(_V,_V).
Warning: user://1:12:
        Singleton-marked variables appearing more than once: [_V]

再次强调,这只是一个警告。如果您希望以_开头的变量出现两次(没有警告),那么就写成__。但最好还是用更有意义的名字,不要以_开头。

你从Prolog的顶层循环得到的是答案;特别是答案替换。它们代表解决方案(这才是我们真正感兴趣的)。有几种方法可以表示答案替换。您正在使用的教程似乎引用了一个非常旧的SWI版本。我想说这个版本可能是15到20岁。

?- append([1,2],X,Y).
X = _G189
Y = [1, 2|_G189]

然而,给出的答案并非不正确:引入了一个新的辅助变量_G189

较新的SWI版本和许多其他系统尝试最小化输出,避免辅助变量。所以

?- append([1,2],X,Y).
Y = [1, 2|X].

也可以。这是一个"更新"版本的答案(也有6年了)。请注意,这个答案比第一个答案告诉您的要多得多:它不仅更简洁地向您展示了答案替换,而且还告诉您正好是这个答案(没有其他答案)。看到末尾的圆点.了吗?这意味着:这里没有更多的问题需要回答。否则,下一个答案将是;

相关内容

  • 没有找到相关文章

最新更新