Ошибка в prolog

#prolog

#пролог

Вопрос:

 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),!.  
  

У меня есть приведенная выше строка кода в Prolog, которая в основном проверяет тип операции plus.

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

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

Я получаю ответ как false вместо T = int .

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

Ответ №1:

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

Ответ №2:

правило плюса таково: привет(g, плюс(A, B), int) : — привет (g, A, int),привет (g,B, int),!.

во время вызова: hi([], plus(в(1), в(2)),T).

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