首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PyClips激活规则以调用python函数

如何使用PyClips激活规则以调用python函数
EN

Stack Overflow用户
提问于 2012-01-23 22:54:39
回答 1查看 1.5K关注 0票数 4

我正在试验PyClips,并希望将其与Python紧密集成,这样当激活规则时,它就会调用python函数。

这是我到目前为止所知道的:

代码语言:javascript
复制
import clips

def addf(a, b):
    return a + b

clips.RegisterPythonFunction(addf)

clips.Build("""
(defrule duck
  (animal-is duck)
  =>
  (assert (sound-is quack))
  (printout t "it’s a duck" crlf))
  (python-call addf 40 2 )
""")

然而,当我断言‘动物是鸭子’的事实时,我的python函数没有被调用:

代码语言:javascript
复制
>>> clips.Assert("(animal-is duck)")
<Fact 'f-0': fact object at 0x7fe4cb323720>
>>> clips.Run()
0

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-26 20:56:34

有一个错误的括号太快地关闭了规则,遗漏了python-call

代码语言:javascript
复制
clips.Build("""
(defrule duck
  (animal-is duck)
  =>
  (assert (sound-is quack))
  (printout t "it's a duck" crlf))
  (python-call addf 40 2 )       ^
""")                      ^      |
                          |   this one
                          |
                      should go here

如果您想验证addf是否实际返回42,可以将结果绑定并打印出来:

代码语言:javascript
复制
clips.Build("""
(defrule duck
  (animal-is duck)
  =>
  (assert (sound-is quack))
  (printout t \"it's a duck\" crlf)
  (bind ?tot (python-call addf 40 2 ))
  (printout t ?tot crlf))
""")


clips.Assert("(animal-is duck)")
clips.Run()
t = clips.StdoutStream.Read()
print t
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8973556

复制
相关文章

相似问题

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