Pour comprendre les prédicats, essayez de « lire » ce qu'ils disent.
Lire la définition add/3
premier ...
add(0,X,X).
Ajout 0
à X
résultats dans X
.
add(s(X),Y,Z):-add(X,s(Y),Z).
Ajout s(X)
(le successeur de X
) à Y
résultats dans Z
si ajoutant X
à s(Y)
(le successeur de Y
) se traduit par Z
.
Si nous considérons successeur que l'ajout de 1, alors cela veut dire (X + 1) + Y
résultats dans Z
si X + (Y + 1)
résultats en Z
. C'est logique, mais ça ne semble aller nulle part. Cependant, nous noterons que cette logique est étroitement liée au cas de base de add(0,X,X)
puisque le cas récursif réduira le premier argument en supprimant une seule succession à chaque itération jusqu'à ce que le premier argument devienne 0
.
Maintenant, nous allons essayer mult/3
...
mult(0,X,0).
Multipliant 0
par X
résultats dans 0
Cela semble être évident.
mult(s(X),Y,Z):-mult(X,Y,A), add(Y,A,Z).
multipliant le successeur de X
Y
par les résultats dans Z
si multipliant par X
Y
résultats dans A
, et ajoutant Y
à A
résultats dans Z
.
Si vous pensez à successeur en ajoutant 1, cela dit que (X+1)*Y
est Z
si X*Y
est A
et A+Y
est Z
. Cela aurait du sens puisque (X+1)*Y
est (X*Y)+Y
qui serait A+Y
.
génial! aidé beaucoup. C'est une autre façon de gérer les problèmes prolog. J'aurais aimé pouvoir voter, mais je ne peux pas. –