Bonjour tout le monde,
Voici l'énoncé de l'exercice:
1)Les entiers naturels sont munis d'un ordre naturel, essayez de définir la relation inférieur ou égal
ainsi que la relation supérieur ou égal sachant que si l'on utilise une notation infixée comme on a
l'habitude de le faire, cela donnerait les règles suivantes :
2)Essayez de définir les mêmes règles avec une notation préfixée ≤(0, X).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 X <= Y 0 <= X :- entier_naturel(X). s(X) <= s(Y) :- X <= Y.
Voilà ce que j'ai écrit:
pour le 1):
Le soucis c'est que ça marche lorsque je je mets des nombres mais pas lorsque je teste par exemple: est_inferieur_ou_egal_a(s(s(0)),s(0)), le terminal me renvoit:ERROR: Arithmetic: `s/1' is not a function
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 entier_naturel(0). entier_naturel(s(X)):- entier_naturel(X). entier_naturel(X):- 0 =< X. succ(0). succ(s(X)):- succ(X). %X inférieur ou egal a Y est_inferieur_ou_egal_a(X,Y):- entier_naturel(X), entier_naturel(Y), X=<Y. %X supérieur ou egal a Y est_superieur_ou_egal_a(X,Y):- entier_naturel(X), entier_naturel(Y), X >= Y.
ERROR: In:
ERROR: [9] s(s(0))=<s(0)
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
Je ne comprends pas comment définir s
Donc je n'arrives pas à mettre en place la succession.Du coup je ne suis pas convaincu que ce que j'ai écrit est bon et je n'ai d'ailleurs pas utilisé la règle s(X) <= s(Y) :- X <= Y.
Pour la question 2), j'ai écris :
/*NOTATION PREFIXEE des règles:
=<(X,Y).
=<(0,X).
=<(s(X),s(Y)):-=<(X,Y).
*/
Je ne suis là aussi pas convaincu de ma réponse car j'obtiens :
Syntax error: Operator expected et No permission to modify static procedure `(=<)/2'
Je suis un peu perdu!
Merci pour vos réponses !
Partager