没有头的条款在prolog中意味着什么?

时间:2013-01-05 03:47:12

标签: prolog iso-prolog

在Prolog程序的开头我看到:

:-dynamic(path/1).

这似乎是一个没有头脑的条款。这是什么意思?

2 个答案:

答案 0 :(得分:5)

当Prolog解释器在加载程序时在子句前面看到:-时,该子句立即执行,而不是成为程序“数据库”的一部分。 :-最常见的用法是在程序文件末尾定义程序的起始谓词,以便用程序加载文件使其运行。

具体而言,dynamic/1 informs the interpreter that the definition of the specified predicate may change at runtime。这是阅读其余程序之前需要知道的内容,以便它可以对path/1谓词的使用做出特殊安排。

答案 1 :(得分:4)

在Prolog文本中,带有主要仿函数(:-)/1的术语是指令。

dynamic指令具有以下效果:

  • 定义了谓词P/N,即使没有给出任何条款。默认情况下,为没有任何子句的谓词执行目标会导致存在错误。
  • 谓词可能会被asserta/1rectract/1等更改。默认情况下,谓词是静态的,并且尝试修改它会导致权限错误。
  • 可以使用clause/2检查这些条款。默认情况下,谓词是私有的,使用clause/2进行检查会导致权限错误。在某些系统(如SWI)上,所有用户定义的谓词都是公共的,因此可以使用clause/2进行检查。因此,在SWI中无法观察到这种效应。

许多实现将未知的指令视为常规目标并执行它们。但是,实现与执行这些目标的精确时间点有很大不同。重新加载文件时,它们会有所不同。

如果您想确保在Prolog文本准备好执行后立即执行 ,请使用指令initialization/1