确保输入列表最小长度序言

时间:2019-09-02 02:26:01

标签: prolog

当两个列表相同时,我有一个谓词是正确的,除了它们的第一个和最后一个元素已交换。

但是,当输入列表中有<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]).

但这在某些情况下以明显的失败状态结束。

1 个答案:

答案 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).
相关问题