当两个列表相同时,我有一个谓词是正确的,除了它们的第一个和最后一个元素已交换。
但是,当输入列表中有<2个元素时,谓词为UNTRUE。
swap_ends([], []).
swap_ends(L1, L2) :-
append([H1 | B1], [H2], L1),
append([H2 | B1], [H1], L2).
这对于| inputList |的所有实例都是正确的> = 2,但也会产生类似的结果。
swap_ends([12345],L).
L = [-1231].
但是我们期望L没有价值。
我尝试替换:
swap_ends([], []).
为
swap_ends([A], [A]).
但这在某些情况下以明显的失败状态结束。
答案 0 :(得分:2)
重用代码的简单解决方案是:
swap_ends([X1, X2| Xs], [Y1, Y2| Ys]) :-
swap_ends_aux([X1, X2| Xs], [Y1, Y2| Ys])
swap_ends_aux([], []).
swap_ends_aux(L1, L2) :-
append([H1| B1], [H2], L1),
append([H2| B1], [H1], L2).