如何使用 clipspy 撤回事实
how to retract a fact using clipspy
如何使用 clipspy 从 python 函数中撤回 CLIPS 中的事实。
我尝试使用 build()
但事实仍然存在。
;;--KB.clp--;;
(defrule main-intent
(initial-fact)
=>
(assert (fact one))
(assert (fact two))
)
(defrule rule_1
?p <- (fact one)
?q <- (fact two)
=>
(py_pfact)
(py_retract ?p ?q)
(py_pfact)
)
运行 来自 python
# run.py
import clips
clips_env = clips.Environment()
def py_pfact():
for fact in clips_env.facts():
print(fact)
def py_retract(p, q):
clips_env.build('retract '+str(p))
clips_env.define_function(py_retract)
clips_env.define_function(py_pfact)
clips_env.load("KB.clp")
clips_env.reset()
clips_env.run()
输出为:
(initial-fact)
(fact one)
(fact two)
(initial-fact)
(fact one)
(fact two)
(事实一)没有收回。似乎 ?p 不包含事实标识符,而是包含整个事实本身。过去我以这种方式使用 PyCLIPS 并且它有效。是否可以使用 ClipsPy 撤销事实?
在clipspy
中,environment.build
method类似于CLIPS CAPIEnvBuild
,它允许构建诸如detemplates和规则作为字符串的结构在引擎中。
clips_env.build("(deftemplate foo (slot bar) (slot baz))")
如果你想撤销一个事实,你可以简单地调用its method。
def py_retract(p, q):
p.retract()
如何使用 clipspy 从 python 函数中撤回 CLIPS 中的事实。
我尝试使用 build()
但事实仍然存在。
;;--KB.clp--;;
(defrule main-intent
(initial-fact)
=>
(assert (fact one))
(assert (fact two))
)
(defrule rule_1
?p <- (fact one)
?q <- (fact two)
=>
(py_pfact)
(py_retract ?p ?q)
(py_pfact)
)
运行 来自 python
# run.py
import clips
clips_env = clips.Environment()
def py_pfact():
for fact in clips_env.facts():
print(fact)
def py_retract(p, q):
clips_env.build('retract '+str(p))
clips_env.define_function(py_retract)
clips_env.define_function(py_pfact)
clips_env.load("KB.clp")
clips_env.reset()
clips_env.run()
输出为:
(initial-fact)
(fact one)
(fact two)
(initial-fact)
(fact one)
(fact two)
(事实一)没有收回。似乎 ?p 不包含事实标识符,而是包含整个事实本身。过去我以这种方式使用 PyCLIPS 并且它有效。是否可以使用 ClipsPy 撤销事实?
在clipspy
中,environment.build
method类似于CLIPS CAPIEnvBuild
,它允许构建诸如detemplates和规则作为字符串的结构在引擎中。
clips_env.build("(deftemplate foo (slot bar) (slot baz))")
如果你想撤销一个事实,你可以简单地调用its method。
def py_retract(p, q):
p.retract()