1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| R1 ==> concat([],L,L).
R2 ==> concat([X|Xs],Y,[X|Z]):-concat(Xs,Y,Z).
concat(Radical,[e,r],[a,i,m,e,r]).
La regle R1 peut-elle s'appliquer ? Non car [e,r] n'est pas unifiable avec [a,i,m,e,r]
Donc c'est la regle R2 qui s'applique
concat(Radical,[e,r],[a,i,m,e,r]).
concat([a|Xs], [e,r], [a|[i,m,e,r]]) :- concat(Xs, [e,r], [i,m,e,r]). (1)
concat(Xs, [e,r], [i,m,e,r]).
La regle R1 peut-elle s'appliquer ? Non car [e,r] n'est pas unifiable avec [i,m,e,r]
Donc c'est la regle R2 qui s'applique
concat(Xs, [e,r], [i,m,e,r]).
concat([i|Xs], [e,r], [i|[m,e,r]]) :- concat(Xs, [e,r], [m,e,r]). (2)
concat(Xs, [e,r], [m,e,r]).
La regle R1 peut-elle s'appliquer ? Non car [e,r] n'est pas unifiable avec [m,e,r]
Donc c'est la regle R2 qui s'applique
concat(Xs, [e,r], [m,e,r]).
concat([m|Xs], [e,r], [m |[e,r]]) :- concat(Xs, [e,r], [e,r]). (3)
concat(Xs, [e,r], [e,r]).
Ici c'est la regle R1 qui s'applique, donc Xs = [];
Si on remonte
(3) donne [m] pour le premier argument de concat
(2) donne [i,m] pour le premier argument de concat
(1) donne [a, i,m] pour le premier argument de concat |
Partager