Reprends ce que tu as écrit :
1 2 3 4 5
| permut([],[]). (regle 1)
permut(L1,[X|L2]):- (regle 2)
elt(X,L1),
enleve(X,L1,L3),
permut(L3,L2). |
Lorsque tu demandes
permut([1,2,3],L). que se passe-t-il ?
On applique la règle 2 :
permut([1,2,3],[X | L2]):-
elt(X, L1), --> qui réussit pour d'abord X = 1
enleve(X, L1, L3) --> qui réussit en donnant L2 = [2,3]
permut(L3, L2). --> règle 2
permut([2, 3], [X | L2]) :-
etc etc.
Tu arrives à
permut([], []). qui réussit et tu remontes ta récursion en récupérant les valeurs successives de L2 et X.
Pour avoir les différentes valeurs, il faut remonter au différents points de choix, ici c'est elt(X, [2, 3]) qui te donnes d'abord 2 puis 3, puis après on remontera à elt(X, [1, 2, 3]) qui donne 1, puyis 2, puis 3.
Partager