2012-01-23 4 views
4

나는 PyClips을 실험하고 있으며 Python과 긴밀하게 통합하여 규칙이 활성화 될 때 Python 함수를 호출합니다.PyClips를 사용하여 Python 함수를 호출하는 규칙 활성화를 얻는 방법

import clips 

def addf(a, b): 
    return a + b 

clips.RegisterPythonFunction(addf) 

clips.Build(""" 
(defrule duck 
    (animal-is duck) 
    => 
    (assert (sound-is quack)) 
    (printout t "it’s a duck" crlf)) 
    (python-call addf 40 2) 
""") 

을 그러나, 나는 '동물 인 오리', 내 파이썬 함수가 호출되지 않는 사실을 주장 할 때 :

>>> clips.Assert("(animal-is duck)") 
<Fact 'f-0': fact object at 0x7fe4cb323720> 
>>> clips.Run() 
0 

무엇 오전 여기

는 내가 지금까지 무엇을 가지고 내가 잘못하고있어?

+0

CLIPS! 나는 그것을 사용하는 것을 좋아했다. 유용한 정보를 제공 할 수는 없지만 CLIP이가는 한 정확합니다. – Joe

+0

함수에 진단 기능이 있는지 확인하여 실행되지 않는지 확인하십시오. 'import pdb; pdb.set_trace()'등 – Joe

답변

2

python-call 밖으로 떠나 너무 빨리 규칙을 닫는 잘못 브라켓있다 :

: 당신이 addf 실제로 42를 반환, 결과는 바인더 제본하고 인쇄 할 수 있는지 확인하려면

clips.Build(""" 
(defrule duck 
    (animal-is duck) 
    => 
    (assert (sound-is quack)) 
    (printout t "it's a duck" crlf)) 
    (python-call addf 40 2)  ^
""")     ^ | 
          | this one 
          | 
         should go here 

clips.Build(""" 
(defrule duck 
    (animal-is duck) 
    => 
    (assert (sound-is quack)) 
    (printout t \"it's a duck\" crlf) 
    (bind ?tot (python-call addf 40 2)) 
    (printout t ?tot crlf)) 
""") 


clips.Assert("(animal-is duck)") 
clips.Run() 
t = clips.StdoutStream.Read() 
print t 
+0

피드백에 감사드립니다. 나는 틀린 괄호에 의해 난처하게되었다라고 나는 믿을 수 없다!. 코드 샘플을 수정하여 pyCLIPS에 변수 (간단한 데이터 유형 : bool, integer, float, string)를 전달하는 방법을 보여줄 수 있습니까 (CLIPS 변수에 '바인딩'이 포함되어 있다고 생각합니다 - 확실하지 않습니다). 또한 CLIPS에서 (단순 데이터 유형) 변수를 다시 파이썬으로 전달하는 방법. 제쳐두고, pyCLIPS에 좀 더 복잡한 데이터 유형 (예 : 목록 또는 dict)을 전달하려는 경우 권장 사항은 무엇입니까? –

+0

@HomunculusReticulli : 죄송합니다. 클립을 사용하지 않아서 당신을 도울 수 없습니다. 나는 또한 그것이 주제에서 벗어날 까봐 두려워하지만 새로운 질문을하는 것은 환영한다. –

+0

흠, 내 질문에 오해 한 것이 확실하지 않습니다. Python에서 PyClips로 변수를 전달할 수있는 방법을 알고 싶습니다. 예를 들어 파이썬에서부터 PyCLIPS에 이르기까지 필자는 파이썬 정수, 더블, 스트링 (어쩌면리스트?)을 표기하고 PyCLIPS에서 트리거 된 규칙을 볼 수있는 방법을 알고 싶다. PyCLIPS -> Python의 경우 PyCLIPS '변수'(예 : string, int, float)를 Python 변수에 전달하는 방법을 알고 싶습니다. 예제 코드에서 addf Python 함수를 사용한 것과 조금 비슷합니다. –