1

Je cherche a supprimer le dernier element d'une liste mais j'y arrive pas.

Je doit ecrire : remove_last_item([H|Tail],List)

en me servant de : apppend(List1,List2,List3)

j'arrive pas a ecrire la forme que doit prendre append.


j'ai fait ceci mais ca n'a pas de sens :

remove_last_item([_|[]],List).

remove_last_item([H|Tail],List):-
apppend(List1,[H],List).
remove_last_item([Tail],List).


A l'aide

2

Je pense que tu dois pas être loin, parce que de mémoire, la syntaxe pour supprimer le dernier élément est append(A, [L], AL)
Par contre, c'est vraiment trop vieux, je me rends compte en relisant mes sources qu'en 5 ans j'ai vraiment tout perdu en Prolog, dsl :/
avatar

3

Bon, déjà, le Prolog n'est pas un langage impératif/procédural, donc AMHA remove_last_item est un nom assez mal choisi pour ton prédicat, c'est trop impératif comme nom.

Ensuite, bah, comme d'habitude en Prolog, il faut définir ça par récurrence:
remove_last_item([],[]).
remove_last_item([H],[]).
remove_last_item([H1|[H2|T]],[H1|[H2|T1]]) :- [H1|remove_last_item([H2|T],[H2|T1])].

Le premier cas, c'est 0 élément (on ne peut plus rien supprimer), le deuxième, c'est 1 élément (on le supprime), le troisième, c'est 2 éléments minimum.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Merci K.K.

En fait j'avais pas piger que l'on pouvait faire tout et n'importe quoi dans les Listes.
Faut dire que le bouquin que j'ai est un peu imprecis sur les Listes.

La tu m'a ouvert l'esprit.


5

Salut , j'ai teste le code, ya une erreur a l'execution quand j'essaie :
remove_last_item([1,2,3],L).

6

j'ai ecris ca mais ca foire : replace(Item1, Item2, List1, List2).


replace(Item1, Item2, [], List2).
replace(Item1, Item2, [X|T], List2):-
X==Item1,
replace(Item1, Item2, T, [List2|Item2]).

replace(Item1, Item2, [X|T], List2):-

replace(Item1, Item2, T, [List2|X]).

7

bon, on dirait que j'ai un petit peu compris comment ca marche; faut utiliser 1 accumulateur pour les listes
.
replace( Item1, Item2, [], [], [] ).
replace( Item1, Item2, [], List2, List2 ).

replace( Item1, Item2, [Item1|T], List2, List3 ):-
replace( Item1, Item2, T, [Item2|List2], List3 ).

replace( Item1, Item2, [X|T], List2, List3 ):-
replace( Item1, Item2, T, [X|List2],List3).