在Prolog程序的开头我看到:
:-dynamic(path/1).
这似乎是一个没有头脑的条款。这是什么意思?
答案 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/1
,rectract/1
等更改。默认情况下,谓词是静态的,并且尝试修改它会导致权限错误。clause/2
检查这些条款。默认情况下,谓词是私有的,使用clause/2
进行检查会导致权限错误。在某些系统(如SWI)上,所有用户定义的谓词都是公共的,因此可以使用clause/2
进行检查。因此,在SWI中无法观察到这种效应。许多实现将未知的指令视为常规目标并执行它们。但是,实现与执行这些目标的精确时间点有很大不同。重新加载文件时,它们会有所不同。
如果您想确保在Prolog文本准备好执行后立即执行 ,请使用指令initialization/1
。