Я пытаюсь ответить на прошлый вопрос для экзамена Prolog. Я нарисовал «дерево», как я полагал, что Пролог должен вести себя с учетом программы и определенной цели. Однако Prolog не ведет себя так, как я ожидал, и дал запрос, для которого я полагал, что он вернет «true», он фактически вернул «false».Рассуждение через программу в Prolog
Вот моя программа:
sum(Term,N) :- Term = 0, N = 0.
sum(Term,N) :- Term = f(M,Subterm), number(M), sum(Subterm,N-M).
Мой запрос и дерево поиска являются следующие (цели в квадратные скобки и выделены жирным шрифтом):
[сумма (е (1,0), 1) ]
Используя правило 1, пусть Term = 0, N = 0, пытается объединить [1 = 0, 1 = 0] сбой.
Redo: используя правило 2, пусть Term = f (1,0), N = 1 [f (1,0) = f (M, подтермер), число (M), сумма (подтема, 1- 1)]
объединительный, пусть М = 1 и подтерм = 0 [номер (1), сумма (0,0)]
Используя Правило 1, то это должно иметь успех. Однако (SWI) Prolog говорит «false».
Если кто-то может указать мне, почему мои рассуждения ошибочны (и как я могу учиться на этом в будущем), я был бы очень благодарен.
* Если я прочитал сумму имени, я сразу же ищу соответствующий +. * Boom! :) – lurker