2011-05-05 6 views
0
lookup([(X,A)|_],X,A).  
lookup([_|L],X,A) :- lookup(L,X,A). 

hi(_,t,bool).  
hi(_,f,bool). 
hi(g,var(X),Y) :- lookup(g,X,Y). 
hi(_,in(X),int). 
hi(_,fl(X),real_exp). 
hi(g,plus(A,B),int) :- hi(g,A,int),hi(g,B,int),!. 

J'ai la ligne au-dessus du code Prolog essentiellement vérifie le type d'une opération, plus.Erreur dans Prolog

lorsque je mets la requête suivante au terminal:

hi([],plus(in(1),in(2)),T). 

je reçois la réponse comme faux au lieu de T = int.

Quelle pourrait être la bonne ligne de code dans mon programme? Je suis incapable de trier l'erreur !!!!

Répondre

1

Vous avez utilisé un atome g dans la règle pour salut/3 où vous vouliez probablement dire d'utiliser une G variable.

0

la règle plus est: salut (g, plus (A, B), int): - Salut (g, A, int), salut (g, B, int),!.

pendant que vous appelez: hi ([], plus (in (1), in (2)), T).

Vous ne savez pas ce que vous voulez faire avec g et [] (une liste de jetons peut-être?) Mais il semble que vous deviez soit changer la requête ou la règle (ou une règle de plus). peut-être g était censé être une variable G? ne peux pas vraiment dire xd