Prolog - 如何清除内存并从头开始?

时间:2011-12-07 15:05:01

标签: memory prolog reset clear prolog-assert

我正在.pl文件中开发一个算法,并在命令窗口中使用查询对其进行检查。 我使用动态变量和收回/断言谓词。当我修改pl文件并单击“重新加载修改的文件”时,我有额外的事实,我不想要。

例如,在我开始时 计数器(0)。

我做了一些事情,收回并断言这个计数器,它变成了计数器(7)。然后,当我重新加载修改后的pl文件时,我同时拥有这两个文件 计数器(0)。和 计数器(7)。

如何防止这种情况并且只有计数器(0)。在一开始?

提前致谢。

3 个答案:

答案 0 :(得分:6)

如果您只使用这些动态事实来实现计数器,您应该考虑这是否是最好的方法。使用assert/1retract/1会使代码变慢。

你可以让计数器变量你在代码中传递的另一个谓词参数(你可能需要区分输入和输出,所以有两个额外的参数),或者使用全局变量(这是非逻辑特性,虽然,有时候是禁止的。)

答案 1 :(得分:4)

这取决于您使用的系统。在YAP,B,GNU,SICStus, 指令:- dynamic(counter/1).具有此效果。也就是说,只有 重新加载后,文件中的事实存在。

在SWI中,动态谓词会在您描述时保留。您需要使用retractall/1直接删除它们,{{1}}会保留谓词动态的信息。

答案 2 :(得分:3)

插入

:- abolish(counter/1).

在文件的开头。当您完成测试后,将其删除。