And*_*ndy 3 list append prolog
我的例子是使用append仿函数:
append([],L,L).
append([H|T],L2,[H|L3]) :- append(T,L2,L3).
//append([123],[abc],L3). this is the query
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是[H | L3]列表.形成我读到的,取消了头脑,那么如何将它附加到列表中.当它通过列表递归并开始回来时,如何附加?提前致谢.
符号[H|T]是语法糖'.'(H, T).所以它是一个带有名字的仿函数.- 一个点和两个参数.考虑:
?- [1,2,3] = [X|L]. X = 1, L = [2, 3].
在这里我们问,如果有一个方程的解决方案[1,2,3] = [X|L].并且,是的,只有一个解决方案用这两个答案替换进行描述.解决这个等式的过程称为统一.该过程包括读取,选择和写入数据结构.所以,你可以称之为"脱头",但你会错过背后的普遍性.毕竟:
?- X = 1, L = [2, 3], M = [X|L]. X = 1, L = [2, 3], M = [1, 2, 3].
在这里,我们构建了一个较小的列表.但是:
?- M = [X|L]. M = [X|L].
这个答案意味着许多解决方 例如,所有长度为1和更长的列表.
您正在查看append/3,请考虑以下查询:
?- append(Xs, Ys, [X,Y,Z]). ?- append(Xs, Xs, Zs). ?- append(Xs, Ys, Zs)