inversion de liste avec accumulateur
Bonjour,
Je cherche à recoder le prédicat reverse/2, en utilisant un accumulateur.
Le lien https://www.developpez.net/forums/d1...nverser-liste/ offre une solution, mais qui est insatisfaisante sur les listes imbriquées.
Par exemple inverse([x,[y,z]],L) va donner [z,y,x], et non [[z,y],x].
J'ai fini par trouver un document qui semble traiter cette question, ici https://www.cril.univ-artois.fr/~sai...ologCours2.pdf.
Mais en fait, le résultat sur le même exemple ne donne toujours pas le bon résultat.
Le prédicat dans ce document est codé comme ceci :
Code:
1 2 3 4 5 6 7 8 9
| reverseRec(L,I):- reversRecAcc(L, [], I).
reverseRecAcc([],I, I).
reverseRecAcc([X|L1],I1, I2):-
atom(X),
reverseRecAcc(L1, [X|I1], I2).
reverseRecACC([X|L1], I1, I2):-
not(atom(X)),
reverseRec(X, I1, I3),
reverseRec(L1, I3, I2). |
Est-ce que quelqu'un aurait une idée ?