Пролог, деривация деревьев, выбор и унификация
вопросВот о том, когда именноRedo
вызывается в Прологе с новыми переменными, или когда он пытается с тем же, я думал, что я понял это. Однако в следующем фрагменте кода я подумал, что дополнительныйRedo
должны были быть названы, но это, похоже, не так.
Моя база знаний следующая:
location(desk,office).
location(apple,kitchen).
location(flashlight,desk).
location('washing machine',cellar).
location(nani,'washing machine').
location(broccoli,kitchen).
location(crackers,kitchen).
location(computer,office).
edible(apple).
edible(crackers).
Мой запрос был
?-location(X,kitchen),edible(X).
со следующим следом:
Call: (9) location(_5612, kitchen) ? creep
Exit: (9) location(apple, kitchen) ? creep
Call: (9) edible(apple) ? creep
Exit: (9) edible(apple) ? creep
X = apple ;
Redo: (9) location(_5612, kitchen) ? creep <====
Exit: (9) location(broccoli, kitchen) ? creep
Call: (9) edible(broccoli) ? creep
Fail: (9) edible(broccoli) ? creep
Redo: (9) location(_5612, kitchen) ? creep
Exit: (9) location(crackers, kitchen) ? creep
Call: (9) edible(crackers) ? creep
Exit: (9) edible(crackers) ? creep
X = crackers.
Почему нет дополнительногоRedo
после первого решения по линииRedo: (9) edible(apple)
(который затем потерпит неудачу, прежде чем перейти к следующемуRedo
) поскольку в коде с функтором есть еще один фактedible
, что будет означать, что была точка выбора, которая создала? Я нашел аннотированный след того же запросаВот, Я выложу короткий фрагмент из него, потому что он имеет дополнительныйRedo
я чувствую, что здесь не хватает:
Может ли кто-нибудь указать мне правильное направление относительно того, что ожидать в этом случае?
Благодарю.