2015-04-23 7 views
0

Я хотел бы знать, как совместить два моих правил, например:Как совместить два правила в одном?

(defrule Rules::pants 
    (declare (auto-focus TRUE)) 
(answer (ident color) (text red)) 
    (answer (ident pants) (text yes)) 
    => 
(printout t "you are wearing red pants")) 

(defrule Rules::shirt 
    (declare (auto-focus TRUE)) 
(answer (ident shirt) (text blue)) 
    (answer (ident red) (text yes)) 
    => 
(printout t "you are wearing blue shirt")) 

Если бы я пишу эти два правила, как:

(defrule Rules::pants 
    (declare (auto-focus TRUE)) 
(answer (ident red) (text yes)) 
    (answer (ident pants) (text yes)) 
(answer (ident shirt) (text yes)) 
    (answer (ident blue) (text yes)) 
    => 
(printout t "you are wearing blue shirt and red pants")) 

Я хочу, чтобы действовать как OR заявление, для срабатывания, если выполнено какое-либо из условий.

ответ

0

Наивный ответ был бы

(defrule Rules::pants  
    (or (and (answer (ident red) (text yes)) 
      (answer (ident pants) (text yes))) 
     (and (answer (ident shirt) (text yes)) 
      (answer (ident blue) (text yes))) 
) 
=> 
    (printout t "you are wearing blue shirt or red pants") 
) 

Первая загвоздка в том, что это правило срабатывает дважды, если у человека есть красные штаны и синяя рубашка. Скорее всего, это не имеет значения, потому что человек не идентифицирован, поэтому мы можем предположить, что на подиуме только один человек.

Отредактировано Вторая загвоздка произойдет, если свойства не связаны друг с другом, то есть когда цвет и элемент могут быть объединены свободно. Подумайте о седловине с синими джинсовыми брюками и красной клетчатой ​​рубашке. Правило будет срабатывать, потому что есть «штаны» и «рубашки», «красный» и «синий», достаточные для соответствия по образцу. Но OP заявил в комментарии (см. Ниже), что есть какой-то способ избежать этого.

+0

Спасибо, я думаю, что это работает, я просто не понял, что может быть проблемой, не могли бы вы объяснить немного больше, если это возможно? –

+0

Просто вставьте (ответьте на рубашку да), (ответьте на красный да), (ответьте брюки да), (ответьте синим да) для дворянина в красной рубашке и синих штанах. – laune

+0

oh нет, я добавлю другую информацию, чтобы это означало что-то, это была только та часть, с которой у меня были проблемы, спасибо –

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

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