Ваша проблема связана с (neq (python-call py_getvar user) 'None')
.Очевидно, клипам не нравится вложенное утверждение.Похоже, что попытка заключить вызов функции в оператор равенства делает плохие вещи.Однако вы никогда не будете утверждать значение, так как ваша функция возвращает либо Nil, либо значение.Вместо этого вам нужно сделать следующее:
def py_getvar(k):
return clips.Symbol('TRUE') if globals.get(k) else clips.Symbol('FALSE')
, а затем просто изменить "(neq (python-call py_getvar user) 'None')"
на "(python-call py_getvar user)"
И это должно сработать.Не использовал pyclips прежде, чем возиться с ним только сейчас, но это должно делать то, что вы хотите.
HTH!
>>> import clips
>>> def py_getvar(k):
... return clips.Symbol('TRUE') if globals.get(k) else clips.Symbol('FALSE')
...
>>> clips.RegisterPythonFunction(py_getvar)
>>> clips.BuildRule("user-rule", "(python-call py_getvar user)", "(assert (user-
present))", "the user rule")
<Rule 'user-rule': defrule object at 0x00A691D0>
>>> clips.Run()
0
>>> clips.PrintFacts()
>>>