2013-05-04 54 views
18

我有这样一段代码:序言:第不在一起的源文件

% 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 

这是什么错误的目的是什么?
我的意思是,文件编译和运行很好,我意识到错误的含义。但为什么?
这仅仅是一个强制执行最佳实践的通知?

我对逻辑编程非常陌生。
谢谢!

+0

对于那些不知道如何解决它的人:按关系的名称将关系(在这种情况下是男性和女性)进行分组。 – 2014-03-04 17:06:44

回答

12

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

+0

有没有办法关闭它?有时候我不能以这种方式编写代码。 – intelis 2013-05-04 12:29:09

+1

@intelis有一种方法可以告诉Prolog你打算散布子句([链接到解释如何做的答案](http://stackoverflow.com/q/2482101/335858))。 – dasblinkenlight 2013-05-04 12:34:50

+0

谢谢,但它不仅仅是子句。我得到一堆不同的警告,比如Singleton变量等。 – intelis 2013-05-04 12:42:23

5

该警告鼓励最佳做法并帮助识别错别字。这里有一个错字例如:

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. 
相关问题