SICStus Prolog忽略更改

时间:2016-11-05 14:28:54

标签: prolog sicstus-prolog

我对prolog很新。使用SICStus,当我对已经被查询过的文件进行更改时,SICStus无法识别这些更改。我唯一的办法是关闭窗口并重新启动它。但显然这是不实际的,因为每当你对文件进行更改时关闭窗口不仅令人讨厌而且浪费时间。我正在使用Windows版本的Sicstus 4.2.1。到目前为止,我已经尝试过命令consult(文件),重建(文件),编译(文件),但没有任何区别。在我关闭并打开窗口之前,SICStus会忽略所做的更改。

比如说,我有谓词测试/ 2。然后我删除了它并保存了文件。然后我输入重建(文件)。我的期望是SICStus会认识到所做的更改,并说谓词不存在。但它仍然存在,好像它存在。只有在我关闭窗口并重新开始之后才会正确地抱怨谓词不存在。

奇怪的是,它识别了一个新添加的谓词with reconsult(file),但如果它被更改或删除,则不会。

1 个答案:

答案 0 :(得分:1)

init(): boolean{ /* your application logic */ return true; } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { this.isAuthRequired = route.data.isAuthRequired; this.isCompanyView = route.data.isCompanyView; return this.init(); } public $num_rows; public function __construct() { $this->num_rows = 6; consult/1 - 都是在1970年代 1 中首次定义的遗留内置函数。今天它们只是用于快速和脏的编译。这些构造的语义是(实际上仍然是),因此特定于实现,不可能就准备好标准化的干净语义达成一致。你指出了其中一个弱点。是的,一旦定义,您就不能隐含地取消定义谓词。使用SICStus'具体实现reconsult/1以删除谓词。

通常,而是使用'.'/2代替,因为这将检查文件修改日期是否已更改。使用此方法的更一般方法是发布make.但请注意,某些更改未得到正确考虑。我仍然使用abolish/2来重新加载更改的文件。

最简单的方法是使用模块,然后再次没有正确考虑界面中的更改,而是发出一些警告:

ensure_loaded/1

1我所知道的最早的文件是1978-09的DECsystem-10 Prolog的用户指南。带有勘误表的1978-10版本是here