reverse([], X, X).
reverse([H|Original], Result, Reverse) :-
reverse(Original, Result, [H|Reverse]).
?- reverse([1,2,3], X, []).
X = [3,2,1].
所以上面是一个相当简单的Prolog程序来反转列表。我只是想找人向我解释反向规则中的Reverse
变量如何以结果结束。根据我的想法,我将原始列表的头部添加到新列表Reverse
的头部,从而颠倒了列表。我没有在任何地方与变量Result进行交互,那为什么它根本没有任何东西呢?
我已经真的对此感到难过了几天了,如果有人能清除它,我将非常感激!
PS。我也在努力解决为什么需要reverse([], X, X).
。
答案 0 :(得分:2)
如果您激活跟踪......
div.clearfix
...然后你可以看到会发生什么:
trace(reverse).
在您的示例中,第二条规则构建了反向列表和第一条规则"副本" ?- reverse([1,2,3],X,[]).
T Call: (7) reverse([1, 2, 3], _G1003, [])
T Call: (8) reverse([2, 3], _G1003, [1])
T Call: (9) reverse([3], _G1003, [2, 1])
T Call: (10) reverse([], _G1003, [3, 2, 1])
T Exit: (10) reverse([], [3, 2, 1], [3, 2, 1])
T Exit: (9) reverse([3], [3, 2, 1], [2, 1])
T Exit: (8) reverse([2, 3], [3, 2, 1], [1])
T Exit: (7) reverse([1, 2, 3], [3, 2, 1], [])
X = [3, 2, 1].
变量的Reverse
列表。