确保输入列表的最小长度为Prolog

确保输入列表的最小长度为Prolog,prolog,Prolog,当两个列表是相同的时,我有一个谓词是真的,只是它们的第一个和最后一个元素被交换了 然而,有一个要求是,当输入列表中有=2的所有实例都是正确的,但也会产生类似的结果 swap_ends([12345],L). L = [-1231]. 但我们认为L没有价值 我尝试过用以下方式代替: swap_ends([], []). 为了 但在某些情况下,这会导致明显的失败状态。重用代码的简单解决方案是: swap_ends([X1, X2| Xs], [Y1, Y2| Ys]) :- swap_

当两个列表是相同的时,我有一个谓词是真的,只是它们的第一个和最后一个元素被交换了

然而,有一个要求是,当输入列表中有<2个元素时,谓词是不真实的

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([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).
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).