2010-09-30 4 views
0
Predicates 
is_a(X,Y)  X is a doctor/handyman 
drives(X,Y) X drives Y 

Nous donné qu'un médecin conduit une voiture de sport et un bricoleur conduit une 4 roues motricesProblèmes avec le code Prolog

is_a(john,doctor). 
is_a(david,handyman). 

Maintenant, je veux le code de décider quel genre de voiture john/david conduisez. J'ai essayé de faire:

drives(X,sportscar) :- is_a(X,doctor). 
drives(Y,4WD) :- is_a(Y,handyman). 

Qu'est-ce que je fais mal?

?- drives(john,fourwd). 
true . 

?- drives(john,sportscar). 
true . 

?- drives(david,fourwd). 
true . 

?- drives(david,sportscar). 
true . 
+2

Je ne sais pas Prolog, mais il semble comme un problème que vous avez utilisé '4WD' dans les définitions et' fourwd' plus tard dans les tests –

+1

m'a demandé d'utiliser uniquement les prédicats fournies à pour les clauses prolog .... – John

+0

Je pense que Michael a raison, '4WD' me donne une erreur de syntaxe. Utilisez 'fourwd' et cela devrait fonctionner. –

Répondre

5

Mon Prolog est un peu rouillé, mais mon interprète n'aime pas votre ligne

drives(Y,4WD) :- is_a(Y,handyman) 

Il se plaint ERROR: c:/test.pl:4:0: Syntax error: Illegal number

Je l'ai passé à

drives(Y,fourwd) :- is_a(Y,handyman) 

et semble fonctionner correctement.

?- drives(X,Y). 
X = john, 
Y = sportscar ; 
X = david, 
Y = fourwd. 

?- 
+0

si je fais cela, je reçois une erreur en disant ERREUR: toplevel: Undefined procédure: – John

+0

Mon prolog est plus qu'un peu rouillé, mais je pense que c'est la bonne réponse. – NealB

+3

Cette réponse est correcte - SWI-PROLOG essaie d'analyser le bit '4WD' sous forme de nombre (car il commence par' 4'), mais échoue en raison du suffixe 'WD'. L'utilisation de l'atome 'fourwd' résout le problème. Vous auriez aussi pu utiliser l'atome ''4WD'' à la place (c.-à-d., Mettre des guillemets simples autour de' 4WD' et SWI-PROLOG le traiterait comme un atome :-) – sharky