如何删除列表的前两个元素和后两个元素?

时间:2020-10-28 15:20:01

标签: prolog

以下代码是不可能的,因为它只能删除前两个或后两个。

delements(L,L1):- append([_,_],L1,L),append(L1,[_,_],L).

2 个答案:

答案 0 :(得分:3)

您不应在同一列表中重复使用L1L。您需要在此处添加一个变量:

delelements(L, R) :-
    append(M, [_, _], L),
    append([_, _], R, M).

因此,这里的M是一个包含L元素的列表,除了后两个元素。 RM的变体,只是删除了第一个元素。

然后给我们:

?- delelements([1,4,1,3,0,2,2,5], R).
R = [1, 3, 0, 2] ;
false.

此外,我们不需要使用append/3 [swi-doc]从头部删除固定数量的元素。我们可以为此使用统一性:

delelements(L, R) :-
    append([_, _ | R], [_, _], L).

答案 1 :(得分:2)

trim(X,Y) :-
    append([[_,_],Y,[_,_]],X).