当两个列表相同时,我有一个谓词是正确的,除了它们的第一个和最后一个元素已交换。
但是,一个要求是,当输入列表中的元素少于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]).
但这在某些情况下以明显的失败状态结束。
重用代码的简单解决方案是:
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).
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句