以下是我对Prolog变量的理解.
单个下划线代表匿名变量,每次发生时都像一个新变量.
以_W这样的下划线开头的变量名不是匿名变量.或者,Prolog内部生成的变量名称(如_G189)不被视为匿名:
?- append([1,2],X,Y).
X = _G189
Y = [1, 2|_G189]
Run Code Online (Sandbox Code Playgroud)
你能帮我理解一下吗?
顺便说一下,我从一些教程中得到了上面的例子,但是当我在SWI-Prolog版本6中运行它时,我得到以下内容:
?- append([1,2],X,Y).
Y = [1, 2|X].
Run Code Online (Sandbox Code Playgroud)
感谢您.
假设我们有以下程序:
a(tom).
v(pat).
Run Code Online (Sandbox Code Playgroud)
和查询(返回false):
\+ a(X), v(X).
Run Code Online (Sandbox Code Playgroud)
在跟踪时,我可以看到X被实例化为tom,谓词a(tom)成功,因此+ a(tom)失败.
我在一些教程中读到,Prolog中的not(+)只是一个测试而不会导致实例化.
有人可以请我澄清以上几点吗?我可以看到实例化.
我知道not(否定为失败)和逻辑否定之间存在差异.您能否参考一篇好文章来解释他们在哪些情况下表现相同以及他们什么时候表现不同?