如何在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)