Пролог: пункты не в исходном файле
У меня есть этот кусок кода:
% 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
Какова цель этой ошибки?
Я имею в виду, что файл компилируется и работает просто отлично, и я осознаю значение ошибки. Но почему?
Это просто уведомление, чтобы обеспечить соблюдение передового опыта?
Я очень плохо знаком с логическим программированием.
Спасибо!
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 Пролог обеспечивает discontiguous/1
директива, чтобы заставить замолчать это предупреждение для определенных предикатов. См. Раздел 7.4.2.3 спецификации. Используется так:
:- discontiguous small/1.