PyCLIPS を利用して CLIPS を Python に統合します。Python メソッドは、 を使用して CLIPS に登録されclips.RegisterPythonFunction(method, optional-name)
ます。いくつかの関数を登録する必要があり、コードを明確にしたいので、登録を行うデコレーターを探しています。
これが現在行われている方法です:
class CLIPS(object):
...
def __init__(self, data):
self.data = data
clips.RegisterPythonFunction(self.pyprint, "pyprint")
def pyprint(self, value):
print self.data, "".join(map(str, value))
これが私がやりたい方法です:
class CLIPS(object):
...
def __init__(self, data):
self.data = data
#clips.RegisterPythonFunction(self.pyprint, "pyprint")
@clips_callable
def pyprint(self, value):
print self.data, "".join(map(str, value))
メソッドのコーディングを保持し、それらを 1 か所に登録します。
NB: CLIPS プロセスが次のような別のプロセスで実行されるマルチプロセッサ セットアップでこれを使用します。
import clips
import multiprocessing
class CLIPS(object):
def __init__(self, data):
self.environment = clips.Environment()
self.data = data
clips.RegisterPythonFunction(self.pyprint, "pyprint")
self.environment.Load("test.clp")
def Run(self, cycles=None):
self.environment.Reset()
self.environment.Run()
def pyprint(self, value):
print self.data, "".join(map(str, value))
class CLIPSProcess(multiprocessing.Process):
def run(self):
p = multiprocessing.current_process()
self.c = CLIPS("%s %s" % (p.name, p.pid))
self.c.Run()
if __name__ == "__main__":
p = multiprocessing.current_process()
c = CLIPS("%s %s" % (p.name, p.pid))
c.Run()
# Now run CLIPS from another process
cp = CLIPSProcess()
cp.start()