Глубина Первый поиск Пролог

Я пытаюсь решить проблему с водой, кувшином (один 7L, один 4L, получить 5L в 7L кувшине), используя поиск в отделе. Однако, что-то продолжает идти не так, когда я пытаюсь вернуть новое состояние от одного из моих действий. Код Пролога

Я не могу понять, что идет не так, вот как выглядит результат после трассировки: введите описание изображения здесь

Заранее благодарю за любую помощь!

1 ответ

Решение

Вы должны скопировать и вставить свой код в свой вопрос; мы не можем копировать и вставлять его из ваших изображений, что делает его более полезным для вас, что, в свою очередь, снижает вероятность того, что мы вам поможем.

В любом случае я заметил некоторые проблемы:

  • Ваше первое правило для go_to_goal/3 не говорит об отношении между ClosedList а также Path, Вы вычислите путь, но никогда не сможете сообщить его вызывающей стороне. (Опять же, вы также игнорируете Path в solve/0...) Если ваша система Prolog выдает вам предупреждения о "одноэлементной переменной", вы никогда не должны игнорировать их!
  • Вы используете == оператор не прав. Цель State == (5, X) утверждает, что в конце вы ищете пару, где первый компонент равен 5 (эта часть в порядке), а второй компонент является несвязанной переменной. Фактически, после ваших вычислений второй компонент пары будет связан с некоторым арифметическим термином. Это сравнение всегда будет неудачным. Вы должны использовать = (унификация) вместо оператора. == используется редко, в особых ситуациях.
  • Если вы поставите термин, как X+Y-7 в заголовок правила, оно не будет оцениваться по числу. Если вы хотите, чтобы он был оценен в число, вы должны использовать is/2 в теле ваших правил.
  • Однако вашей самой непосредственной проблемой является следующее (видно из трассы, которую вы опубликовали): Второе предложение go_to_goal/3 пытается позвонить action/2 с парой (0, 0) в качестве первого аргумента. Это всегда терпит неудачу, потому что первый аргумент каждого предложения action/2 это термин state(X, Y), Если вы измените это на state(0, 0) в go_to_goal/3, вы должны быть в состоянии сделать немного прогресса.
Другие вопросы по тегам