首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用剪贴画收回事实

如何使用剪贴画收回事实
EN

Stack Overflow用户
提问于 2018-12-28 13:46:41
回答 1查看 397关注 0票数 1

如何使用剪贴画从python函数的剪辑中撤回事实。我试过使用build(),但事实仍然存在。

代码语言:javascript
复制
;;--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)
)

从蟒蛇跑

代码语言:javascript
复制
# 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()

产出如下:

代码语言:javascript
复制
(initial-fact)
(fact one)
(fact two)
(initial-fact)
(fact one)
(fact two)

(事实一)没有收回。它似乎不是包含事实标识符,而是包含整个事实本身。在过去,我曾以这种方式使用过PyCLIPS,而且它起了作用。使用ClipsPy可以撤回事实吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-28 14:54:28

clipspy中,environment.build 方法类似于CLIPS EnvBuild,它允许在引擎中以字符串的形式构建像deftemplates和规则这样的构造。

代码语言:javascript
复制
clips_env.build("(deftemplate foo (slot bar) (slot baz))")

如果您想撤回一个事实,只需调用它的方法

代码语言:javascript
复制
def py_retract(p, q):
    p.retract()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53959559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档