使用 PyClips,我试图在 Clips 中构建规则,从 Python 解释器动态检索数据。为此,我按照手册中的说明注册了一个外部函数。
下面的代码是该问题的一个玩具示例。我这样做是因为我有一个包含大量数据的应用程序,以 SQL 数据库的形式,我想使用 Clips 进行推理。但是,如果我可以简单地将 Clips 直接“插入”到 Python 的命名空间中,我不想浪费时间将所有这些数据转换为 Clips 断言。
但是,当我尝试创建规则时,出现错误。我究竟做错了什么?
import clips
#user = True
#def py_getvar(k):
# return globals().get(k)
def py_getvar(k):
return True if globals.get(k) else clips.Symbol('FALSE')
clips.RegisterPythonFunction(py_getvar)
print clips.Eval("(python-call py_getvar user)") # Outputs "nil"
# If globals().get('user') is not None: assert something
clips.BuildRule("user-rule", "(neq (python-call py_getvar user) nil)", "(assert (user-present))", "the user rule")
#clips.BuildRule("user-rule", "(python-call py_getvar user)", "(assert (user-present))", "the user rule")
clips.Run()
clips.PrintFacts()