我从序言开始,作为练习,我尝试反转列表。
例如,inv([1,2,3], S)
应给出 S = [3,2,1]。
以下是我和合作伙伴已经完成的工作:
conc([], L, L).
conc([X|L1], L2, [X|L3]) :- conc(L1, L2, L3).
tail([X|Y], S) :- conc([], Y, S).
inv([X|Y], S) :- tail([X|Y], TAIL), inv(TAIL, R_TAIL), conc(R_TAIL, X, S).
inv([], []).
前三行工作正常。但真的不明白最后两个发生了什么,因此如何解决它。
我只想找到列表的尾部(当我只使用tail
函数时,这是有效的),反转它,然后将其附加到列表的头部。
你们能帮帮我吗?
最佳答案
基于foldl/4的替代解决方案:
prepend_element(E, L, [E|L]).
inv(List, Reversed) :-
foldl(prepend_element, List, [], Reversed).
关于list - Prolog 中的反转列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46858898/