[PROLOG] Je comprends pas cette logique....

Je comprends pas cette logique.... [PROLOG] - Divers - Programmation

Marsh Posté le 02-11-2003 à 14:31:39    

Bonjour,  
 
j'ai fait un petit programme en Prolog pour voir un peu comment ca marche, mais il y a un truc qui me rend fou :
 

Code :
  1. habitat(bear,forest).
  2. habitat(elephant,savanah).
  3. habitat(cat,home).
  4. brown(bear).
  5. black(cat).
  6. gray(elephant).
  7. gray(mouse).
  8. big(bear).
  9. small(cat).
  10. scary(dog).
  11. dark(Z) :-
  12.   black(Z).
  13. scary(Z) :-
  14.   dark(Z), habitat(Z,forest), big(Z).
  15. dark(Z) :-
  16.   brown(Z).


 
A la question scary(dog), il répond YES.
Mais aux question : dark(dog), big(dog), habitat(dog,forest), il me répond NO !!!!!
 
Là je comprends pas pourquoi.
 
Merci de votre aide.

Reply

Marsh Posté le 02-11-2003 à 14:31:39   

Reply

Marsh Posté le 02-11-2003 à 14:56:19    

en mettant les définitions de dark et scary avant les prédicats, c'est pas mieux ?
Y'a un ordre de définition en prolog ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 02-11-2003 à 15:24:43    

j'ai essayé, c'est pareil

Reply

Marsh Posté le 02-11-2003 à 15:29:18    

t'as essayé en pas a pas  pour voir ce qu'il bricolait exactement ?

Reply

Marsh Posté le 02-11-2003 à 15:32:43    

effectivement, y'a un des 2 scary qui efface l'autre.  
 
scary(dog) est faux à la fin de ton script.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 02-11-2003 à 15:34:04    

Ca commence a être vieux pour moi le prolog, mais cette ligne la "scary(dog)." veux bien dire que scary(dog) repondra toujours YES non ?

Reply

Marsh Posté le 02-11-2003 à 15:40:39    

Kristoph a écrit :

Ca commence a être vieux pour moi le prolog, mais cette ligne la "scary(dog)." veux bien dire que scary(dog) repondra toujours YES non ?

oui, la subtile différence se situe entre ce qu'il veut avoir et ce qu'il a.
mais son programme ressemble quand même fortement à ça :
http://www.csupomona.edu/~jrfisher [...] l/3_1.html


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 02-11-2003 à 15:51:07    

nraynaud a écrit :

effectivement, y'a un des 2 scary qui efface l'autre.  
 
scary(dog) est faux à la fin de ton script.  


 
ah bon... pourquoi ?  :heink:

Reply

Marsh Posté le 02-11-2003 à 15:59:46    

greeeg a écrit :


 
ah bon... pourquoi ?  :heink:  

J'aimerais bien le savoir moi aussi. Je suis un pizzaïolo du prolog, mais c'est ce que me dit http://kti.ms.mff.cuni.cz/~bartak/prolog/testing.html
 
je suis sur google en train de regarder les tutoriaux et cours.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 02-11-2003 à 16:14:10    

J'ai l'impression que c'est surtout utilisé pour sélectionner des données dans une base, pas pour en deviner.
 
En gros ton problème consterait à générer des animaux de toutes les couleurs tailles et habitat et à les classer : possible (éléphant gris)/impossible (éléphant petit), effrayant ou non.
 
C'est ce que je vois par exemple des exemple chèvre/chou/loup où on les voit générer tout le graphe et sélectionner les arcs intéressants.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 02-11-2003 à 16:14:10   

Reply

Marsh Posté le 09-04-2006 à 16:13:55    

Désolé, je remonte un topic vieux de 3 ans ! (je l'ai trouvé après une recherche à propos de "prolog" ).  
 
Je n'ai pas essayé le petit script, mais une erreur saute aux yeux :  
 


dark(Z) :- black(Z).
scary(Z) :- dark(Z), habitat(Z,forest), big(Z).
dark(Z) :- brown(Z).  


 
Quand on met deux faits ayant même foncteur (de même arité) à la suite, on a un "ou" entre les deux règles. Mais il faut que les deux règles se suivent...  
Il faudrait écrire :  
 


dark(Z) :- black(Z).
dark(Z) :- brown(Z).
 
scary(Z) :- dark(Z), habitat(Z,forest), big(Z).  


 
Ainsi, on a : Quelque soit Z, si black(Z) ou brown(Z) alors dark(Z).  
 
 
Le reste me semble correct, mais j'ai la flemme d'essayer.. D'autant que l'auteur du topic est certainement devenu mille fois plus expérimenté que moi en porolog, et, s'il existe encore, rira en revoyant cet ancien sujet...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed