Я работаю над назначением, где создал парсер для арифметического языка с префиксом-нотацией. Мне нужно написать предикат, который строит ast для любого заданного значения V (т. Е. Сгенерирует ast A так, что всякий раз, когда A оценивается, это значение V). Моя идея была достаточно простой:Prolog is/2, аргументы недостаточно подробно описаны
genAst(Val, Env, Ast) :-
ev(Ast, Env, Val).
где ev - предикат оценки. Когда я запускаю это я получаю ошибку на названии относительно этой части ЭВ-сказуемого:
ev(xer_(power(N)), Env, V) :-
integer(N),
V is Env^N. %THIS LINE
где оба V и N развязаны. Я изо всех сил пытаюсь придумать еще один элегантный способ сделать это, знает ли кто-нибудь, как я могу заставить пролог генерировать целые числа для этих двух переменных?
Я надеюсь, что это было понятно :)
Благодаря, но его не ко то будет несвязанным в этом сценарий, но и V и N – fafner
К сожалению, я читал «привязанный», а не «несвязанный». В этом случае вы не можете использовать 'is'. Левая должна быть единственной, несвязанной переменной, а справа должны быть все связанные переменные. Prolog не будет перечислять возможные решения выражения 'is/2'. – lurker
ОК, спасибо, я не знал, что :) Возможно ли, что я могу проверить, связаны ли переменные перед тем, как сделать это/2? – fafner