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

笑脸花

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

但是,一个要求是,当输入列表中的元素少于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]).

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

保罗·莫拉(Paulo Moura)

重用代码的简单解决方案是:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章