Prolog-如何清除内存并从头开始?
-
29-10-2019 - |
题
我正在开发.pl文件中的算法,并在命令窗口中通过查询检查它。 我使用动态变量和缩进/断言谓词。而且,当我修改pl文件并单击“重新加载修改后的文件”时,我有不需要的其他事实。
例如,一开始我有 计数器(0)。
然后我做某事,撤回并确认这个计数器,它变成counter(7)。然后,当我重新加载修改后的pl文件时, 计数器(0)。和 计数器(7)。
如何防止这种情况并且仅使用counter(0)。一开始是什么?
谢谢。
解决方案
插入 通用标签
在文件的开头。完成测试后,将其删除。
其他提示
如果仅使用这些动态事实来实现计数器,则应考虑这是否是最好的方法。使用assert/1
和retract/1
会使代码变慢。
您可以使计数器变量成为您在代码中传递的另一个谓词参数(您可能需要区分输入和输出,因此需要两个额外的参数),或者使用全局变量(这是非逻辑功能,但是,有时候这是不可行的。
这取决于您使用的系统。在YAP,B,GNU,SICStus中,
指令:- dynamic(counter/1).
具有此作用。也就是说,只有
重新加载后,文件中的事实就会出现。
在SWI中,动态谓词将按照您的描述保留。您需要使用retractall/1
直接删除它们,该代码保留谓词是动态的信息。
不隶属于 StackOverflow