Пролог, дополняющий список - PullRequest
1 голос
/ 22 октября 2011

У меня проблема с добавлением списка.

find_paths(Start, Finish) :- path(Start, Finish, [Start], Path), 
                             append([Path], List, Result), 
                             fail.

Путь - это список.

Я получу n путей для ошибки, но если я поставлю write (Result), онанапечатает это [[...], H234] n раз.

Как сказать прологу использовать обратно результат последней итерации и добавлять вместе с новым путем для каждого сбоя?

1 Ответ

2 голосов
/ 09 апреля 2012

Переменная List свободна, поэтому неудивительно, что результат добавления пути ([...]) к переменной (H234) печатается. Самый простой способ улучшить ваш код - это

find_paths(Start, Finish, List) :- 
       findall(Path, path(Start, Finish, [Start], Path), List).

Кроме того, вы можете изменить определение пути / 4, чтобы накапливать результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...