КЛИП: как узнать, существует ли факт
Я довольно новичок в программировании экспертов и застрял с проблемой. Я хочу выяснить, существует ли факт, а затем выполнить некоторую операцию, основанную на этих фактах в 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>