Пролог - бесконечный цикл при закрытии SWI-пролога - PullRequest
0 голосов
/ 07 января 2019

Я написал код ниже в прологе:

go :- write(">>"), read(X), process(X).

И делать разные вещи с процессом / 1. Чтобы поймать любые неизвестные команды, которые я добавил:

process(Y) :- write("unknown command.\n"), go.

Проблема в том, что при выходе из SWI-пролога, закрывая окно до нормального завершения программы, оно попадает в бесконечный цикл. Я пытался найти то, что вызывает swi-prolog при выходе, но не смог найти его, чтобы включить в код. Любая помощь в этой части или альтернативный обходной путь будет очень признателен. Заранее спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Вы должны также обработать термин end_of_file.

После последнего термина Prolog, то есть, когда до конца файла или потока читается только макет или комментарии, read/1 создает термин end_of_file.

Поскольку (во многих современных системах) действие, выполняемое при чтении за концом файла (при стандартном вводе), равно reset, также последующее чтение будет производить этот термин. И, таким образом, ваша программа зацикливается, жалуясь, что она не знает команду end_of_file.

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