28

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

% 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

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

私は論理プログラミングに非常に慣れていません。
ありがとう!

4

2 に答える 2

22

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

于 2013-05-04T11:55:36.467 に答える
10

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

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.
于 2013-07-19T19:14:13.670 に答える