web-dev-qa-db-ja.com

プロローグ:句がソースファイルで一緒になっていない

私はこのコードを持っています:

% 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

このエラーの目的は何ですか?
つまり、ファイルは正常にコンパイルおよび実行され、エラーの意味を認識しています。しかし、なぜ?
これは、ベストプラクティスを実施するための単なる通知ですか?

私はロジックプログラミングが初めてです。
ありがとうございます。

22
intelis

正解です。これは、関連するすべての句をソースファイルにまとめるというベストプラクティスを実施するための警告です。それ以外は、ソースファイル内の句の相対的な順序が変わらない限り、句の近接性は重要ではありません。

15
dasblinkenlight

警告はベストプラクティスを奨励し、タイプミスを見つけるのに役立ちます。次に誤植の例を示します。

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.
6
mndrix