В настоящее время работаю над книгой «Семь языков за семь недель», и я застрял при запуске первых примеров пролога.Это относится к той же части кода, что и этот вопрос ;однако я считаю, что мой вопрос совершенно другой.
Я определил 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 параметрами?Что я здесь не так делаю?Не могу поверить, что это ошибка в моем прологе;)?