Bonjour tout le monde.
Je suis en train de bosser sur un tp de Prolog intitulé "Arithmétique de Péano". Je vous donne l'introduction du tp, au cas où vous ne sauriez pas de quoi il s'agit ...
J'ai déjà codé plusieurs relations. Je suis bloqué à celle du pgcd.On code les entiers naturels à l'aide des entiers de Péano :
* la constante 0 et de
* la fonction unaire s.
Par exemple, 3 est codé s(s(s(0))). Proposer et discuter, suivant l'instanciation des arguments, les différentes définitions sous forme de clauses de Horn définies (i.e. en Prolog pur) des relations suivantes :
...
J'ai bien réussi à pondre quelque chose, mais ce code marche uniquement pour des nombres qui ne sont pas premier entre eux, comme par exemple 6 et 3, 4 et 2 (il ne marche pas pour 3 et 2 par exemple ...). Je voudrais avoir votre aide pour coder la fonction pgcd.
Voilà ce que j'ai fait :
Voilà, j'espère avoir été assez clair. Si vous voulez savoir autre chose, je suis à votre disposition. Merci de vous être donné la peine de lire ma discussion.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ---------------------------------------- add(0,X,X). add(X,0,X). add(s(X), Y, s(Z)) :- add(X, Y, Z). ---------------------------------------- ---------------------------------------- % Division euclidienne entre deux entiers div(A,B,0,A) :- inf(A,B). div(A, B, s(Q), R) :- div(Aa, B, Q, R), add(Aa, B, A). ----------------------------------------- ----------------------------------------- % PGCD de deux entiers de Peano pgcd(X,Y,Z) :- div(X,Y,Z,0). pgcd(X,Y,P) :- div(X,Y,_Q,R), pgcd(Y,R,P). ------------------------------------------ add(0,X,X). add(X,0,X). add(s(X), Y, s(Z)) :- add(X, Y, Z).
Partager