我正在使用python和剪辑来解决一个问题,这是我想要做的:
我希望从python加载一个.clp文件并运行它。我需要添加基于数据库的事实以及。因此,.clp文件中将包含规则,我使用
clips.Load("myfile.clp")加载我的文件。我被困在如何将事实放入剪辑中。我在剪辑中也有一个可变的final,它将存储基于事实的结果。我需要把它带回python来运行其他代码。
谢谢
发布于 2014-05-06 18:43:12
我假设您使用的是PyCLIPS。
import clips
def clips_callable(f):
def wf(*args, **kwargs):
if f(*args, **kwargs):
return clips.Symbol("TRUE")
else:
return clips.Symbol("FALSE")
clips.RegisterPythonFunction(wf, f.__name__)
@clips_callable
def pyprint(s):
print s
print "".join(map(str, s))
clips.Load("test.clp")
clips.Reset()
clips.Run()
# assert a fact.
a = clips.Assert("(order (part-id p1) (quantity 20))")
clips.Run()test.clp看起来像这样:
(deffunction MAIN::print ($?value)
(python-call pyprint ?value)
; (printout t ?value)
)
(deftemplate MAIN::order
(slot part-id)
(slot quantity)
)我还附带了@clips_callable装饰器,这使得从剪辑中调用python函数变得非常容易。
https://stackoverflow.com/questions/23433839
复制相似问题