Prolog:子句不在源文件中

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我有一段代码:

% 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

这个错误的原因是什么?

提问于
用户回答回答于

正确,这是对强制执行最佳实践的警告,也就是将所有相关的子句放在源文件中。除此之外,源文件中子句之间的邻近性并不重要,只要它们的相对顺序没有变化。

用户回答回答于

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

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.

扫码关注云+社区