Prolog匿名变量
下面是我对Prolog变量的理解Prolog匿名变量,prolog,prolog-toplevel,prolog-anonymous-variable,Prolog,Prolog Toplevel,Prolog Anonymous Variable,下面是我对Prolog变量的理解 一个下划线代表匿名变量,它类似于每次出现的新变量 以类似下划线的W开头的变量名不是匿名变量。或者,Prolog内部生成的变量名(如_G189)不被认为是匿名的: 你能帮我理解吗 顺便说一下,我从一些教程中获得了上面的示例,但是当我在SWI Prolog版本6中运行它时,我得到了以下结果: ?- append([1,2],X,Y). Y = [1, 2|X]. 谢谢。 匿名变量\uu是唯一一个不同事件代表不同变量的变量。以开头的其他变量不是匿名变量。不同的引用引
?- append([1,2],X,Y).
Y = [1, 2|X].
谢谢。
匿名变量\uu
是唯一一个不同事件代表不同变量的变量。以开头的其他变量不是匿名变量。不同的引用引用同一变量(在同一范围内)。但是,许多序言(如SWI)都会警告您,如果变量不以下划线开头,则只会出现一次:
?- [user].
a(V).
Warning: user://1:9:
Singleton variables: [V]
您必须将该变量重命名为\u V
,以避免该警告。这有助于程序员更好地识别变量名中的拼写错误。在许多系统中还有一些这样的限制
a(_V,_V).
Warning: user://1:12:
Singleton-marked variables appearing more than once: [_V]
同样,这只是一个警告。如果希望以\uu
开头的变量出现两次(无警告),请改为编写\u
。但是最好不要用开头的\uu
来命名更有意义的名字
答案
您从Prolog的顶级循环中得到的是答案;特别是回答替换。它们用于表示解决方案(这是我们真正感兴趣的)。答案替换有几种表示方法。您正在使用的教程似乎引用了非常旧的SWI版本。我想说这个版本可能有15到20年的历史了
?- append([1,2],X,Y).
X = _G189
Y = [1, 2|_G189]
然而,给出的答案并不错误:引入了一个新的辅助变量\u G189
较新版本的SWI和许多其他系统试图最小化输出,避免使用辅助变量。所以
?- append([1,2],X,Y).
Y = [1, 2|X].
也一样好。这是一个“较新”版本(也有6年历史)的答案。注意,这个答案比第一个答案告诉你的要多得多:它不仅更简洁地向你展示了答案替换,而且还告诉你确实存在这个答案(没有更多)。请参见末尾的点
?这意味着:这里没有更多的答案。否则将出现一个代码>获取下一个答案
?- append([1,2],X,Y).
Y = [1, 2|X].