变量
匿名变量_
是唯一一个不同出现代表不同变量的变量。以_
开头的其他变量不是匿名的。不同的出现指向同一个变量(在同一范围内)。然而,许多像SWI这样的Prolog会警告您如果一个不以下划线开头的变量只出现一次:
?- [user].
a(V).
Warning: user://1:9:
Singleton variables: [V]
你需要将那个变量重命名为
_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年的历史)。注意,这个答案比第一个答案告诉你更多:它不仅以更简洁的方式展示了答案替换,还告诉你只有确切地这一个答案(没有更多了)。看见最后的点 . 了吗?这意味着:这里没有更多需要回答的了。否则会有 ;
来表示下一个答案。