我在我的python程序中使用swi-prolog。它从用户那里获取输入查询并为其创建断言。我将这部分保留为齿轮工作者(如服务器套接字),它一直在监听输入查询。
第一个查询 - 程序生成x个断言
第二个查询 - 程序生成y个断言,现在程序在处理查询时认为(x + y)断言。
等等。
这是在每次查询执行后刷新断言的方法吗?这是process.pro的代码片段:
此处链接接受断言,问题是输入查询。
question(REND, RULE):-
linkage(LINK, LEND, REND_NEW),
(
(
rule_first_question(LINK, REND_NEW) ->
nb_getval(rule, RULE_NEW),
nb_getval(rend, REND)
; nb_linkval(rule, ''), nb_getval(rule, RULE)
)
;
(
rule_third_question(LINK, REND_NEW) ->
nb_getval(link, LINK_NEW),
nb_getval(rule, RULE_NEW)
; nb_linkval(rule, ''), nb_getval(rule, RULE)
)
;
(
rule_four_question(LINK, REND_NEW) ->
nb_getval(link, LINK_NEW),
nb_getval(rule, RULE_NEW)
; nb_linkval(rule, ''), nb_getval(rule, RULE)
)
).
答案 0 :(得分:1)
是的,撤回可以帮助您从数据库中删除事实。
for p in self.prolog_question_identify.query("retract(linkage(_,_,_)),fail"):
print
在连结中你可以给出你想要清除的价值。
答案 1 :(得分:0)
我假设'冲洗'你的意思是'忘记'。
retractall / 1就是你想要的。
示例:
? - 断言(bottoms_on_fire(all_english_men))。
真。
? - 断言(bottoms_on_fire(all_scottish_men))。
真。
? - bottoms_on_fire(all_english_men)。
真。
? - retractall(bottoms_on_fire(_))。
真。
%注意 - 使用匿名变量来统一所有这些事实
? - bottoms_on_fire(all_english_men)。
假。