Bonjour à tous,
je suis débutant en Prolog et je dois faire un exercice ou l'on me demande de créer une règle qui renvoie
une liste d'entiers non présents dans une autre liste d'entier sans dépasser les valeurs extrêmes de cette liste.
par exemple:
je pense que je suis pas loin du but. mais le programme ne me retourne pas de réponse, je suis obligé d'utiliser un "write" pour afficher le résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 rule([1,3,5,8], Res). renvoie: Res = [2, 4, 6 , 7]
De plus si j'appuie sur espace à la fin de l'éxécution (j'utilise SWi-Prolog), le programme continue de m'enumérer des résultats qui dépasse les valeurs maximal de la liste passée en argument.
Voici mon code:
la fonction "ret" renvoie le terme placé à la position demandée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 ret(_, [], _) :- fail. ret(0, [X | _], Y) :- Y = X, !. ret(I, [_ | Queue], Y) :- I1 is I - 1, ret(I1, Queue, Y). rule([_ | []], Z) :- write(Z), !. rule([X | Queue], Z) :- ret(0, Queue, U), X1 is X + 1, X1 =:= U, rule(Queue, Z); Test is X + 1, rule([Test | Queue], [Z | Test]).
merci de votre aide.
Partager