2009-10-12 15 views
0

Comment puis-je accomplir ceci:somme de récursivité queue, puissance, gcd en prolog?

Donner une définition récursive de la queue pour chacun des prédicats suivants.
power(X,Y,Z): XY = Z.
gcd(X,Y,Z): Le plus grand commun diviseur de X et Y est Z.
sum(L,Sum): Somme est la somme des éléments de L.

jusqu'à présent, je l'ai fait, mais pas sûr si cela est exact

power(_,0,1) :- !. 
power(X,Y,Z) :- Y1 is Y - 1,power(X,Y1,Z1),Z is X * Z1. 

sum(void,0). 
sum(t(V,L,R),S) :- sum(L,S1),sum(R,S2), S is V + S1 + S2. 
+1

Si vous n'êtes pas sûr que c'est correct, ESSAYEZ-LE. –

+0

Frank: si vous indentez le texte 4 espaces, il le formatera en code. Modifiez votre question et essayez-la. Le point d'interrogation orange dans la barre d'outils de l'éditeur est lié à un document avec un autre balisage de mise en forme. – outis

Répondre

2

Ils ne sont pas récursifs en queue. Vous pouvez écrire des variantes récursives en utilisant un accumulateur, voir this answer.

Votre somme est sur un arbre, ce qui est inhabituel, normalement on utiliserait une liste. En Prolog [] est la liste vide et [X | R] est le modèle pour une liste non vide avec la tête X et la queue R.

+0

Monsieur, s'il vous plaît pouvez-vous m'aider à écrire le pouvoir de manière récursive? Je viens de commencer à l'apprendre et je ne peux pas le faire. S'il vous plaît, aidez-moi avec l'un d'entre eux au moins. Merci Frank – FRANK

+2

Ce sont vos devoirs, pas les miens. Je ne suis même pas ton instructeur. Désolé, je ne vous donnerai pas de solutions spécifiques, vous êtes supposé apprendre par vous-même. – starblue