2013-04-25 2 views
0

업데이트 코드 : ?f<-(practice-is-on-off OFF)논리 또는 CLIPS에서하는 방법?

(defrule no-practice "Rules for when practice cannot be held" 

     (or ?f <- (practice (number-of-paddlers ?p&:(< ?p 6))) 
      ?f <- (practice (number-of-coaches ?c&:(< ?c 1)))) 

     => 
     (modify ?f (practice-is-on-off OFF))) 

    ;end 

나는 클립에서 템플릿을 정의하고 있는데이 논리 연산자를 사용 또는 AM에 대한 검사를 추가 할 수 있습니다. 내가 템플릿을로드 할 때 는 그러나, 여기에 내가 가진 무엇

[TMPLTDEF1] Invalid slot or not defined in corresponding deftemplate practice. 

ERROR: 
(defrule MAIN::no-practice "Rules for when practice cannot be held" 
    ?f <- (practice (or 

말하는 오류를 던지고있다 : 감사합니다 사전에 어떤 통찰력을 위해. 감사합니다

(deftemplate practice "structure of a practice" 

    (slot number-of-paddlers (type NUMBER)) 
    (slot number-of-coaches (type NUMBER)) 
    (slot practice-is-on-off (type SYMBOL) (default ON)) 
    (slot practice-id (type NUMBER)) 

) 


(defrule no-practice "Rules for when practice cannot be held" 
    ?f <- (practice 
    (or 
      (number-of-paddlers 
       ?v_number-of-paddlers&:(
        < ?v_number-of-paddlers 6)) 

      (number-of-coaches 
       ?v_number-of-coaches&:(
        < ?v_number-of-coaches 1)) 

    ) 
    ) 

    => 
     (modify ?f (practice-is-on-off OFF) 
     ) 
) 

답변

0

오류가라는 이름의 슬롯을 일치하려고 당신을 말하고있다 "또는"는 practice deftemplate과 그 슬롯이 존재하지 않습니다. 위의 규칙이 practice하지 않는 한 두 번 발사 수

(defrule no-practice "Rules for when practice cannot be held" 
    (or ?f <- (practice (practice-is-on-off ON) 
         (number-of-paddlers ?p&:(< ?p 6))) 
     ?f <- (practice (practice-is-on-off ON) 
         (number-of-coaches ?c&:(< ?c 6)))) 
    => 
    (modify ?f (practice-is-on-off OFF))) 

참고 : 여기에 당신이해야 할 :

버전 1을 시도하고있는 무슨 달성 할 것이다 "아니오 사례"규칙의 두 가지 다른 버전은 CE에서 practice-is-on-off이 "ON"으로되어 있는지 확인하십시오.

버전 2 : @bogatron

(defrule no-practice "Rules for when practice cannot be held" 
    ?f <- (practice (practice-is-on-off ON) 
        (number-of-paddlers ?p) (number-of-coaches ?c)) 
    (test (or (< ?p 6) (< ?c 6))) 
    => 
    (modify ?f (practice-is-on-off OFF))) 
+0

감사합니다. 나는 버전 1을 좋아한다. 그러나 그렇게 할 때 규칙이 무한 루프에 빠지게된다. 나는 수표를 넣으려고합니다. '? f- (연습 (on-off-on 연습)) .... 그러나 나는 그것의 구문에서 길을 잃고 있습니다 ... 당신은 AND의 조합을 가질 수 있습니까? CLIPS에서 동일한 규칙의 OR 논리? 당신의 도움은 대단히 감사합니다! – engr007

+0

CE에서 CE가 "켜짐"상태인지 확인하지 않는 한 CE가 무엇입니까? 나는 이것을 어떻게 할 수 있는가 ... 그것은 위의 질문에서도 내가 요구 한 것이다. 나는 당신의 메모를 거기에서 놓쳤을 것 같다. @ bogatron에게 다시 한 번 감사드립니다. – engr007

+0

CE = "조건부 요소"- 규칙의 "if"부분에있는 선행 조건 중 하나 일뿐입니다. ON/OFF를 체크하기 위해서는'practice' 일치하는 문장을'연습 (number-of-paddlers? p & : ( bogatron