2010-07-29 2 views
0

규칙의 LHS에서 일치하는 사실에서 슬롯의 참조를 취소 하시겠습니까? 변수 이 사실과 일치하는 경우 해당 사실 내에서 슬롯이 일치하는 추가 조건을 만드는 방법을 찾을 수 없습니다.클립에서 일치하는 사실의 슬롯을 역 참조

예를 들어 아래 코드에서 "(do (action? action))"형식의 사실이있는 경우 텍스트를 인쇄하고 싶습니다. 그러나? action은 그 자체로 사실이며, 그 사실의 "name"슬롯이 "실행"되면 규칙을 트리거하기를 원합니다. 나는 어떻게 이것을 성취 할 것인가?

(deftemplate do 
     (slot action) 
) 
(deftemplate action 
     (slot name) 
) 
(defrule find-do "" 
     ?do <- (do (action ?action)) 
     (test (eq ?action.name "run")) ; This causes a syntax error. 
     => 
     (printout t "doing " ?action crlf) 
) 
(deffacts startup (do (action (action (name "running"))))) 

답변

1

클립 참조 설명서를 검색하면 필자가 원하는 것처럼 보이는 사실 "슬롯 - 값"기능을 찾았습니다.

(deftemplate do 
     (slot action) 
) 
(deftemplate action 
     (slot name) 
) 
(defrule find-do "" 
     ?do <- (do (action ?action)) 
     (test (eq (fact-slot-value ?action name) "run")) 
     => 
     (printout t "doing " ?action crlf) 
) 
(deffacts startup (do (action (action (name "running")))))