你对
reverseList/2
使用
T
作为反向列表的尾部。反向列表是在递归的最深层构建和打印的,然后对所创建的值不做任何处理:
2 ?- reverseList( [1,2,3,4], [0]).
[4,3,2,1,0]
true.
相反,将其作为新的逻辑变量传入,作为第三个参数,在两次调用之间原封不动地传递,最后将其设置为最深层:
reverseList([], List, T) :- List = T, write(List), nl.
reverseList([H | Old], [], T) :- reverseList(Old, [ H ], T).
reverseList([ H | Old], New, T) :- reverseList(Old, [ H | New], T).
那就称它为
reverseList( [1,2,3,4], Newtail, T)
得到你的
T
在递归的最深层设置:
6 ?- reverseList( [1,2,3,4], [0], T).
[4,3,2,1,0]
T = [4, 3, 2, 1, 0].
定义到处都是,命名很糟糕,而且被使用了
可能是“tail”,所以你应该给这个新的参数命名如下
R
相反,至少暗示它将持有
颠倒的
列为