Пролог, деривация деревьев, выбор и унификация

вопросВот о том, когда именно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 я чувствую, что здесь не хватает:

Может ли кто-нибудь указать мне правильное направление относительно того, что ожидать в этом случае?

Благодарю.

Ответы на вопрос(0)

Ваш ответ на вопрос