Cahir7
Cahir7

Reputation: 13

CLIPS - compare 2 facts if are equal, with wildcard in rule

I am trying to create rule which compares in this way:

CLIPS> (assert (flower red yellow))
CLIPS> (assert (flower blue yellow))
CLIPS> (assert (isflower yellow))
CLIPS> (defrule has_color2
(isflower ?x)
(eq flower red ?x flower red ?)
=>
(printout t "has property" ?x crlf))
CLIPS> (run)

So my question is this ; How to compare a variable against a set of facts to check if theres any match ? The alone ? mark on the 6th line is where I want to insert a wildcard in a way it's done. Whole line is inaccurate probably.

Upvotes: 0

Views: 108

Answers (1)

Gary Riley
Gary Riley

Reputation: 10757

CLIPS> (assert (flower red yellow))
<Fact-1>
CLIPS> (assert (flower blue yellow))
<Fact-2>
CLIPS> (assert (isflower yellow))
<Fact-3>
CLIPS> 
(defrule has_color2
   (isflower ?x)
   (flower ? ?x)
   =>
   (printout t "has property " ?x crlf))
CLIPS> (agenda)
0      has_color2: f-3,f-2
0      has_color2: f-3,f-1
For a total of 2 activations.
CLIPS> (facts)
f-1     (flower red yellow)
f-2     (flower blue yellow)
f-3     (isflower yellow)
For a total of 3 facts.
CLIPS> (run)
has property yellow
has property yellow
CLIPS> 

Upvotes: 1

Related Questions