2014-11-25 9 views
0

Я довольно новичок в программировании экспертов и встал с проблемой. Я хочу узнать, существует ли факт, а затем выполнить некоторую операцию, основанную на этих фактах в RHS.CLIP: как узнать, существует ли факт

Для примера: - У меня есть 4 факта.

(deffacts test (A 1) (B 2) (C 3) (D 4)) 

следующее Правило E не существует. поэтому он никогда не переходит в RHS. и доза не нарушает правила.

(defrule rul1 
    (declare (salience 10)) 
    (A ?var1) 
    (B ?var2) 
    (C ?var3) 
    (E ?var4) 
    => 
    (if 
    (
     or (or (or (= ?var1 1) (= ?var2 1)) (= ?var3 1)) (= ?var4 4) 
    ) 
    then 
    (printout t "Rule matched" crlf)) 
    ) 
    ) 

Мое требование, если факт не существует просто игнорировать это или назначить фиктивное значение, так что он может стрелять Rule.

Как я могу это достичь?

+0

Ваш вопрос немного расплывчато. Всегда ли вы хотите, чтобы правило срабатывало или только если по крайней мере 3 из 4 фактов совпадают? – bogatron

+0

Это должно быть CLIPS (с правом «s»?) – stackoverflowwww

ответ

1

Попробуйте поместить соответствующий логику в условиях господства, а не действия:

CLIPS> 
(deffacts test (A 1) (B 2) (C 3) (D 4)) 
CLIPS> 
(defrule rul1 
    (declare (salience 10)) 
    (or (A 1) 
     (B 1) 
     (C 1) 
     (E 4)) 
    => 
    (printout t "Rule matched" crlf)) 
CLIPS> (reset) 
CLIPS> (agenda) 
10  rul1: f-1 
For a total of 1 activation. 
CLIPS> 

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

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