2010-04-17 8 views
0

Exactement ce qui est la définition de Prolog pour la fonction de puissance. J'ai écrit ce code et il donne quelques erreurs Je veux connaître le code exact pour la fonction de puissance.Fonction de puissance dans prolog

pow(X,0,1). 
pow(X,Y,Z):-Y1=Y-1,pow(X,Y1,Z1),Z1=Z*X. 

Un problème avec ce code?

+0

double possible de http://stackoverflow.com/questions/1448790/power-function-in-prolog – Burkhard

Répondre

1

Regardez ici - power function in prolog. Le prédicat de pow intégré n'est pas implémenté en prologue pour des raisons d'efficacité - comme la plupart des prédicats arithmétiques.

+0

Merci beaucoup! :-) – NHans

1

Il y a deux problèmes avec le code.

  • Pour faire Arithmétique en Prolog, vous devez utiliser est/2 au lieu de =
  • Les variables de la multiplication devaient être permutés (Z est Z1 * X)
  • Vous devez placer un garde pour assurer que l'exposant est positif, sinon vous pouvez avoir des situations où le programme ne se termine pas

Voici le code fixe:

pow(_,0,1). 
    pow(B,E,R) :- E > 0,!, E1 is E -1, pow(B,E1,R1), R is B * R1. 

Voici une seconde, la queue en utilisant la version récursive un accumulateur

powa(B,E,R) :- powa(B,E,1,R). 
    powa(_,0,A,A). 
    powa(B,E,A,R) :- E > 0, !, E1 is E - 1, A1 is B * A, powa(B,E1,A1,R).