PyClips를 사용하여 파이썬 인터프리터에서 데이터를 동적으로 검색하는 룰을 클립에 작성하려고합니다. 이를 위해 the manual에 설명 된대로 외부 함수를 등록합니다.클립 전문가 시스템에서 파이썬 함수 사용
아래의 코드는 문제의 장난감 예입니다. 필자는 클립을 사용하여 추론하고 싶은 SQL 데이터베이스의 형태로 데이터의 큰 코퍼스를 가진 응용 프로그램을 가지고 있기 때문에이 작업을 수행하고 있습니다. 그러나 클립을 파이썬의 네임 스페이스에 직접 "플러그인"할 수 있다면이 모든 데이터를 클립 어서션으로 변환하는 데 시간을 낭비하고 싶지는 않습니다.
그러나 규칙을 만들려고하면 오류가 발생합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
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()
죄송합니다. 그러나 해결책은 작동하지 않습니다. 같은 오류가 발생합니다. 목표는 임의의 Clips 표현식에서 파이썬 함수의 결과를 사용하므로 (neq ...)를 제거하는 것이 허용되지 않았 음을 참고하십시오. – Cerin
'(neq ...)'는 기호 TRUE 또는 FALSE를 반환합니다. Null (get_var에 의해 반환 됨)과 문자열 "None"의 비교를 무효화 한 결과는 항상 false가 아니거나 TRUE가 아니지만 어떤 세계가 포함되어 있습니다. 그러나 함수에 대한 입력을 기반으로 기호 TRUE 또는 FALSE를 원하면 해당 함수의 값을 반환하십시오. –
코드를 실행 했습니까? 솔루션에서 오류를 반환합니다. – Cerin