Задача о волке, козе и капусте

      Комментарии к записи Задача о волке, козе и капусте отключены

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 2 мес. назад.

  • Автор
    Сообщения
  • #1848

    questioner
    Участник

    Разбираюсь с приведенным вами решением задачи о волке, козе и капусте.
    Не нашёл полного кода рабочей программы. Попытался собрать по кускам. Получаю ошибку:

    ?-  path(([wolf,goat,cabbage],[],left),([],_,right)).
    ERROR: Undefined procedure: edge/2
       Exception: (8) generate([wolf, goat, cabbage], [], left)

    Не могу понять, как нужно определить edge применительно к задаче о волке козе и капусте.

  • #1849

    Edge — это не правило, его не надо определять. В статье написано откуда появляются дуги — их добавляет функция proliferate. Более детально это описано в статье, посвященной обходам графа на Prolog.
    Дуга добавляется при помощи стандартного предиката assert, но чтобы этот предикат мог сработать, она предварительно должна быть объявлена динамической.
    :- dynamic edge/2.

    Добавьте это в самое начало программы. Без такого объявления машина логического вывода пробует найти функцию edge, которой не существует (об этом и написано в сообщении компилятора).

Для ответа в этой теме необходимо авторизоваться.