Подтвердить что ты не робот

Пролог: Классы не объединены в исходном файле

У меня есть эта часть кода:

% Family tree
female(pen).
male(tom).
male(bob).
female(liz).
female(pat).
female(ann).
male(jim).

parent(pam, bob).
parent(tom, bob).
parent(tom, liz).
parent(bob, ann).
parent(bob, pat).
parent(pat, jim).

Я получаю эту ошибку:

Warning: Clauses of female/1 are not together in source-file
Warning: Clauses of male/1 are not together in source-file

Какова цель этой ошибки?
Я имею в виду, что файл компилируется и работает очень хорошо, и я знаю о значении ошибки. Но почему?
Это просто уведомление для обеспечения лучшей практики?

Я очень новичок в логическом программировании.
Спасибо!

4b9b3361

Ответ 1

Правильно, это предупреждение для обеспечения наилучшей практики, которая заключается в том, чтобы связать все связанные друг с другом предложения в исходном файле. Кроме того, близость предложений друг к другу в исходном файле не имеет значения, если их относительный порядок не изменяется.

Ответ 2

Предупреждение поощряет передовую практику и помогает выявить опечатки. Здесь пример опечатки:

small(ant).
small(fly).
small(molecule).

smell(sweet).
smell(pungent).
small(floral).

Ошибка трудно обнаружить, но, к счастью, компилятор предупреждает:

Warning: /tmp/test.pl:7:
Clauses of small/1 are not together in the source-file

С предупреждением и ошибкой строки можно быстрее найти и исправить опечатку.

ISO Prolog предоставляет директиву discontiguous/1, чтобы отключить это предупреждение для определенных предикатов. См. Раздел 7.4.2.3 спецификации. Он используется следующим образом:

:- discontiguous small/1.