-->

Prolog的匿名变量(Prolog anonymous variable)

2019-07-18 00:38发布

以下是我已经明白约Prolog的变量。

  1. 单下划线代表匿名变量,这是它发生一个新的变量,每次等。

  2. 开始喜欢_W下划线的变量名不是一个匿名变量。 或者,Prolog的内部产生的变量名,像_G189,不被认为是匿名:

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

能否请你帮我明白了吗?

顺便说一句,我得到了上面的例子,从一些教程,但是当我在SWI-Prolog的第6版中运行它,我得到以下几点:

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

感谢您。

Answer 1:

变量

匿名变量_是不同地方出现代表不同变量的唯一变量。 与启动其他变量_不是匿名。 不同事件是指相同的变量(在同一范围内)。 然而,像许多SWI将Prologs警告你不应该开始用下划线的变量只出现一次:

?- [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岁)的答案。 需要注意的是这个答案告诉你,比第一个更:它不仅告诉你答案替代更紧凑,但它也会告诉你恰好有这一个答案(没有更多)。 见点. 在末尾? 这意味着:有没有更多的在这里回答。 否则,将是一个; 下一个答案。



文章来源: Prolog anonymous variable