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 

я определяю шаблон в клипах, и я использую логический оператор OR. Однако, когда я загрузить шаблон, он бросает ошибку говоря

[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 и слот не существует. Вот две альтернативные версии «нет-практики» правила, которое будет выполнять то, что вы пытаетесь сделать .:

Вариант 1:

(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))) 

Следует отметить, что приведенное выше правило может сработать дважды за исключением случаев, когда practice вы также проверяете, что practice-is-on-off «ВКЛ» в CE.

Версия 2:

(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

Благодаря @bogatron. Мне нравится версия 1. Однако это приводит к тому, что правило переходит в бесконечный цикл, когда я это делаю. Я пытаюсь поставить чек '? F <- (практика (on-on-off) ON)) ... но я теряюсь в синтаксисе этого ... у вас может быть комбинация AND и OR в том же правиле в CLIPS? Ваша помощь очень ценится! – engr007

+0

, если вы также не проверяете, что практика - это - включено-выключено, «ON» в CE ... что такое CE? как я могу это сделать ... это то, о чем я спрашивал и в вышеупомянутом вопросе; Наверное, я пропустил твою записку. Еще раз спасибо @bogatron. – engr007

+0

CE = «Условный элемент» - это только один из антецедентов в «if» части правила. Чтобы проверить ON/OFF, вы, вероятно, захотите изменить свой оператор соответствия 'practice', чтобы он был как' (практика (число-paddlers? P &: ( bogatron

 Смежные вопросы

  • Нет связанных вопросов^_^