#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