необученное исключение: ошибка (наличие_ошибки (процедура, лайки / 0), друг / 0) (семь языков) - PullRequest
0 голосов
/ 02 февраля 2019

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

Я определил likes и friend, как в книге;my friends.pl:

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

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

Я использую пролог gnu (v1.4.5, в Ubuntu 18.10) и могу загрузить файл friends.pl consult, либо через | ?- [friends.pl] или | ?- ['friends.pl'], либовызов gprolog с параметром --consult-file: gprolog --consult-file friends.pl просто отлично

Запрос о фактах likes или первой части правила friend работает просто отлично:

| ?- likes(grommit, cheese).

yes
| ?- friend(grommit, grommit).

no

Однако, когда я пытаюсь выполнить запрос, относящийся ко второй части правила, я получаю следующее:

| ?- friend(grommit, wendolene).
uncaught exception: error(existence_error(procedure,likes/0),friend/0)

Когда я читаю сообщение об ошибке, оно говорит мне, что не существует процедуры "лайков", которая бы занимала 0параметры, верно?Но где в моем правиле ссылка на такую ​​процедуру с 0 параметрами?Что я здесь не так делаю?Не могу поверить, что это ошибка в моем прологе;)?

1 Ответ

0 голосов
/ 02 февраля 2019

Было несколько сообщений об этой проблеме (ошибки существования для предикатов с нулем арности, которые не вызываются в исходном коде, когда существует предикат с тем же именем с арностью один или больше) с GNU Prolog в Ubuntu.Решение состоит в том, чтобы загрузить исходные коды GNU Prolog и скомпилировать их вручную.

...