ошибка пролога при классификации подкласса атома - PullRequest
0 голосов
/ 28 ноября 2018

Я все еще изучаю пролог, но сталкиваюсь с этой ошибкой.

Warning: /usr/local/home/jay275/SDRIVE/cs3500/hw7/part1.pl:23:
    Clauses of bird/1 are not together in the source-file
      Earlier definition at /usr/local/home/jay275/SDRIVE/cs3500/hw7/part1.pl:10
      Current predicate: animal/1
      Use :- discontiguous bird/1. to suppress this message

Я пытаюсь сказать, что если ястреб, то это птица.Если это птица, то это животное ... и т.д ..

Вот мой код:

cat(sylvester).
cat(felix).

dog(spike).
dog(fido).

primate(george).
primate("king kong").

bird(tweety).

hawk(tony).

fish(nemo).

%then Mammal if cat or dog or primate
mammal(X) :- cat(X) ; dog(X) ; primate(X).

%then Animal if mammal or bird or fish
animal(X) :- mammal(X) ; bird(X) ; fish(X).

%then bird if hawk
bird(X) :- hawk(X).

РЕДАКТИРОВАТЬ: я не думаю, что эта ошибка на самом деле вызывает какие-либо проблемы, ноЯ просто проверяю, что не делаю ничего неправильного.

РЕДАКТИРОВАТЬ2: ТАС ответил на мой вопрос, поместив следующий код вместе.

bird(tweety).

%then bird if hawk
bird(X) :- hawk(X).

hawk(tony).

1 Ответ

0 голосов
/ 29 ноября 2018

Сообщение информирует вас о том, что пункты вашей предиката bird / 1 находятся в разных позициях в вашем исходном файле, а именно в строке 10 (bird(tweety).) и строке 23 (bird(X) :- hawk(X).).Между этими двумя строками есть пункты о других предикатах (ястреб / 1, рыба / 1, млекопитающее / 1, животное / 1), поэтому определение птицы / 1 неоднозначно.

Стандарт, ИСО / МЭК13211-1: 1995, говорится о пунктах:

7.4.3 Пункты

[...]

Все пункты для пользовательской процедуры P должно быть
последовательных терминов чтения одного текста Пролога, если только
не является директивой discontiguous(UP) директива, указывающая P
в этом тексте Пролога.

Такэто оставляет вам две опции:

1) Вы добавляете предложенную директиву в ваш исходный файл:

:- discontiguous bird/1.

cat(sylvester).
cat(felix).
.
.
.

2) Вы изменяете свой исходный файл так, что появляются предложения bird / 1в последовательных строках:

cat(sylvester).
cat(felix).

dog(spike).
dog(fido).

primate(george).
primate("king kong").

bird(tweety).
%then bird if hawk          % <- moved here from the end of source file
bird(X) :- hawk(X).         % <- moved here from the end of source file

hawk(tony).

fish(nemo).

%then Mammal if cat or dog or primate
mammal(X) :- cat(X) ; dog(X) ; primate(X).

%then Animal if mammal or bird or fish
animal(X) :- mammal(X) ; bird(X) ; fish(X).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...