Клуб сабвуферов в прологе - PullRequest
0 голосов
/ 17 марта 2019

Я довольно уверен в фактах, которые я объявил, а именно:

hoof(tony).
hoof(tim).
hoof(ellen).


hoof(X) :- skier(X); climber(X).
not(likes(X, rain)) :- climber(X).
likes(X, snow) :- skier(X).

likes(tony, X) :- \+likes(ellen, X).
likes(ellen, X) :- \+likes(tony, X).
likes(tony, rain).
likes(tony, snow).

И когда я пытаюсь выполнить запрос с помощью hoof(X), climber(X), \+skier(X)., он возвращает сообщение об ошибке:

uncaught exception: error(existence_error(procedure,climber/1),top_level/0)

Что мне здесь не хватает?

1 Ответ

1 голос
/ 17 марта 2019

У вас нет предложений для climber/1, поэтому предикат неизвестен среде выполнения Prolog. Отсюда ошибка существования предиката для вашего запроса. Возможное решение - объявить предикаты, такие как skier/1 и climber/1 как dynamic :

:- dynamic([climber/1, skier/1]).

Эта директива объявляет предикаты во время выполнения, сообщая, что предикаты могут быть изменены во время выполнения. Это сделает ваш запрос неудачным, а не вызовет исключение.

...