如何在prolog中连接两个列表而不更改变量名

如何在prolog中连接两个列表而不更改变量名,prolog,Prolog,这是我的示例代码 append( [], X, X). append( [X | Y], Z, [X | W]) :- append( Y, Z, W). test(X,DIST):- append(X,DIST,DIST), write(DIST). 我使用以下方法调用此程序: test([0,1],[1,2,3]). 但我只得到了false输出。因为我在append()调用中同时命名了变量DIST

这是我的示例代码

append( [], X, X).                                  
append( [X | Y], Z, [X | W]) :-
  append( Y, Z, W).   


test(X,DIST):- 
  append(X,DIST,DIST),
  write(DIST).
我使用以下方法调用此程序:

test([0,1],[1,2,3]).

但我只得到了
false
输出。因为我在append()调用中同时命名了变量DIST。

append/3谓词如下所示: 追加(X,Y,Z):Z是将X追加到Y的结果

因此,将append(X,Y,Y)读取为Y是将X附加到Y的结果,只有当X为[]时才是真的。例如,append([],[1,2,3],[1,2,3])为true

在所有其他情况下,将非空列表附加到Y不会产生列表Y,即它是false。例如,append([0],[1,2,3],[1,2,3])为false


Prolog中的变量是不可变的:它们只能分配一次,直到分配完成时系统返回到之前。

为什么不更改变量名就要尝试这样做呢?要扩展@peter.cyc所写的内容:您的测试评估
append([0,1],[1,2,3],[1,2,3])
但是如果
append/3
按照它们所描述的那样工作,那么这应该是错误的。也许您还有其他想法,但接下来您需要解释关系
append/3
的含义。只是输入错误:当X是
[]
(在lisp中为nil,不是null)