我想知道,我知道你可以使用assert在声明谓词为-:dynamic时添加事实或规则,但这仅允许所做的更改在该会话中保留,例如,如果关闭Prolog窗口,则数据库更改将丢失。 所以我想知道,有没有办法使assert和retract谓词对Prolog .pl文件进行永久更改? 谢谢
我正在开发一个.pl文件中的算法,并在命令窗口上使用查询来检查它。我使用动态变量和撤回/断言谓词。但是,当我修改pl文件并单击“重新加载修改后的文件”时,会出现我不想要的额外事实。 例如,在开始时,我有counter(0)。 然后我做了一些事情,撤回和断言这个计数器,它变成了counter...
从阅读手册来看,我似乎找不到这两者之间的区别。 手册中说: 建议使用retractall/1来清除动态谓词的所有条款。 因此我选择在我的程序中使用retractall/1;但是,我想知道它们之间的区别。
现在我的检查是确保X(Y)不是在我的小型数据库中得到承认的事实。由于X(Y)返回false,它将尝试进行断言。(我意识到当X是规则而不是事实时会存在问题) ifNotAdd(X,Y):- not(call(X,Y)), !, assert(X(Y)). 例如,假设...
我正在阅读http://cs.union.edu/~striegnk/learn-prolog-now/html/node3.html#subsec.l1.kb1,但是我无法运行以下谓词: SICStus 4.0.1 (x86-win32-nt-4): Tue May 15 21:17:49...
我写了下面这段简单代码,当我输入 "male." 时,我期望这个代码会询问我一次“是男性吗?”,如果我输入“否”,它将在屏幕上输出“她是女性”。 male :- ( print('is it male ? '),read(yes)) -> true; asserta( not(male...
我是Prolog的新手,但我卡在了这个看似简单的命令上。我已经成功加载了一个知识库,但每当我尝试使用assert(甚至是help)时,都会出现以下消息: uncaught exception: error(existence_error(procedure,assert/1),top_lev...