Пролог существование_ошибка после семи языков в течение семи недель - PullRequest
27 голосов
/ 06 апреля 2011

Я просто следую книге «Семь языков за семь недель».

Я установил gprolog на свой компьютер Mac с помощью команды port install gprolog-devel и запустил первый код пролога.

likes(wallace, cheese).
likes(grommit, cheese).
likes(wendolene, sheep).

friend(X, Y) :- \+(X = Y), likes(X, Z), likes(Y, Z).

Если я наберу likes(wallace, cheese). в интерпретаторе пролога, у меня будет ошибка

необработанное исключение: ошибка (наличие_ошибки (процедура, лайки / 2), верхний_уровень / 0).

Prolog 1.3.1 не может быть установлен на моем Mac, я использую prolog 1.4.0.

1 Ответ

38 голосов
/ 06 апреля 2011

Интерактивный интерпретатор gprolog выполняет запросы к загруженному списку предикатов, поэтому вы получаете исключение existence_error. Вам придется загружать в него свои предикаты либо с помощью среды IDE, которая выполняет загрузку, либо вручную.

Вот один из подходов:

| ?- [user].
compiling user for byte code...
likes(wallace, cheese).
likes(grommit, cheese).
likes(wendolene, sheep).

friend(X, Y) :- \+(X = Y), likes(X, Z), likes(Y, Z).

* Press Ctrl-D to end input. *
user compiled, 6 lines read - 909 bytes written, 15538 ms

yes
| ?- friend(wallace,grommit).

yes
| ?- friend(wallace,wendolene).

no

В руководстве gprolog об этом говорится в главе Консультации с программой Prolog

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