Ошибка в прологе - PullRequest
0 голосов
/ 05 мая 2011
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),!.  

У меня есть вышеприведенная строка кода в Прологе, которая в основном проверяет тип операции плюс .

поэтому, когда у меня есть следующий запрос на терминале:

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

я получаю ответ как ложный вместо T = int.

, что может быть правильной строкойкода в моей программе?Я не могу разобраться в ошибке !!!!

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Вы использовали атом g в правиле для hi / 3 , где вы, вероятно, хотели использовать переменную G.

0 голосов
/ 05 мая 2011

правило плюс: hi ( g , плюс (A, B), int): - hi (g, A, int), hi (g, B, int),!.

пока вы звоните: привет ( [] , а также (в (1), (2)), Т).

не уверен, что вы хотите сделать с g и [] (возможно, с некоторым списком токенов?), Но похоже, что вам нужно либо изменить запрос, либо правило (или и еще одно правило). может быть, g должен был быть переменной G? не могу сказать XD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...