CLIP: how to find out if a fact exists

2.1k views Asked by At

I am pretty new in expert programming and stuck with a problem. I want to find out if a fact exists and then do some operation based on those facts in RHS.

For Eg:- I have 4 facts.

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

in following Rule fact E does not exist. so it Never goes to RHS. and dose not fire the rule.

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

My requirement is if a fact doesn't exist simply ignore that or assign a dummy value so that it can fire Rule.

How can I achieve this?

1

There are 1 answers

0
Gary Riley On

Try placing the matching logic in the conditions of the rule rather than the actions:

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>