2012-05-08 3 views
1

C 프로그램에 포함 된 CLIPS로 작업 중이므로 C 함수 호출로 모든 작업을 수행해야하며 CLIPS 명령 줄을 사용할 수 없습니다.CLIPS : 사실 가져 오기 및 포인터 가져 오기

의 난과 같은 몇 가지 사실을 주장한다 가정 해 봅시다 :

AssertString("(pizza 1)"); 
AssertString("(cauliflower 7)"); 
AssertString("(cheesecake 0)"); 

는 분명 내가이 시점에서 내 사실에 대한 포인터를 얻을 수 (고사하고 유지)하지 않습니다. 내가 나중에 Retract(factPtr)을 사용하여 사실을 철회하기를 원할 때, 나는 분명히 철회하고자하는 사실에 대한 포인터가 필요합니다. 위의 행 다음에 사실 (cauliflower 7)을 다시 찾고 포인터를 얻는 방법은 무엇입니까?

전체 사실 목록을 GetFactList([...])까지 가져 와서 반복하고 문자열을 비교해야합니까? 만약 그렇다면, 멀티 플렉스에서 어떻게하면 좋을까요? DATA_OBJECT이 함수가 리턴합니까? 아니면 더 좋은 방법이 있습니까?

아이디어 나 코드 예제에 감사드립니다.

답변

1

사실 조회 기능을 사용하여 사실 목록을 조회하고 조치를 수행 할 수 있습니다. 당신은 EvalFunction 통해 호출 할 수 있습니다 :

DATA_OBJECT result; 

Eval("(do-for-all-facts ((?f pizza)) (eq ?f:implied (create$ 1)) (retract ?f))",&result); 
Eval("(do-for-all-facts ((?f cauliflower)) TRUE (retract ?f))",&result); 

을 첫 번째 통화에서 만 피자 사실을 하나가 들어 갔는지 값으로. 두 번째 호출에서 모든 콜리 플라워 사실은 철회됩니다.

관련 문제