Prolog:子句不在源文件中

时间:2013-05-04 11:46:24

标签: prolog iso-prolog

我有这段代码:

% 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 个答案:

答案 0 :(得分:14)

正确,这是强制执行最佳实践的警告,即将所有相关子句放在源文件中。除此之外,源文件中的子句彼此接近并不重要,只要它们的相对顺序不会改变。

答案 1 :(得分:6)

警告鼓励最佳做法并帮助发现拼写错误。这是一个错字的例子:

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.