PyClips を使用して、Python インタープリターからデータを動的に取得するルールを Clips に構築しようとしています。これを行うには、マニュアルで概説されているように、外部関数を登録します。
以下のコードは、問題のおもちゃの例です。私がこれを行っているのは、Clips を使用して推論したい SQL データベースの形式で、大量のデータのコーパスを持つアプリケーションがあるためです。ただし、Clip を 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()