Le code suivant n'est pas possible, car il ne peut supprimer que les deux premiers ou les deux derniers.

delements(L,L1):- append([_,_],L1,L),append(L1,[_,_],L).
1
GelarehNo 28 oct. 2020 à 18:20

2 réponses

Meilleure réponse

Vous ne devez pas réutiliser L1 et L dans la même liste. Vous avez besoin d'une variable supplémentaire ici:

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

Voici donc M une liste qui contient les éléments de L, à l'exception des deux derniers. R est une variante de M, sauf que les premiers éléments sont supprimés.

Cela nous donne alors:

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

De plus, nous n'avons pas besoin d'utiliser append/3 < / strong> [swi-doc] pour supprimer un nombre fixe d'éléments de la tête. Nous pouvons utiliser l'unification pour cela:

delelements(L, R) :-
    append([_, _ | R], [_, _], L).
3
Willem Van Onsem 28 oct. 2020 à 16:18
trim(X,Y) :-
    append([[_,_],Y,[_,_]],X).
2
madeofmistake 28 oct. 2020 à 16:22