КЛИП: как узнать, существует ли факт

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

Например:- У меня есть 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))
    )
    )

Мое требование - если факт не существует, просто проигнорируйте это или назначьте фиктивное значение, чтобы оно могло запустить Правило.

Как мне этого добиться?

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> 
Другие вопросы по тегам