MoMo8
MoMo8

Reputation: 25

CLIPS input taking and comparison

I need to take in input from the user which color and then output the flags that contain that color. I have this so far. I am pretty sure that the setup of my templates is correct. I just seem to be having issues with the input and the comparison and output part. Any help would be appreciated. I looked at a couple of other posts and used what I could be it still is not working. Thank you.

(deftemplate country-info
    (slot country) 
    (multislot color) 

)
; setting the template for flags taking the country name and color of the flags

(deffacts country
    (country-info (country usa) (color red | white | blue))
    (country-info (country belgium) (color black | yellow | red))
    (country-info (country poland) (color white | red))
    (country-info (country monaco) (color white | red))
    (country-info (country sweden) (color yellow | blue))
    (country-info (country Panama) (color white | blue | red)) 
    (country-info (country jamacia) (color black | yellow | green))
    (country-info (country colombia) (color blue | yellow | red))
    (country-info (country italy) (color black | yellow | red))
    (country-info (country ireland) (color green | white | orange))
    (country-info (country botswana) (color blue | white | black))
)

(defrule color 
    (color ? name) 
    (not (color ? name ?))
=> 
    (printout t "What color is it you are looking for?")

(defrule check-input
    (var ?color) 
    (country-info (country ?country1) (color $?color1))
    (test (member$ ?color ?color1))
=>(printout t "Countries are" ? country crlf)
)

Upvotes: 1

Views: 909

Answers (1)

Gary Riley
Gary Riley

Reputation: 10757

CLIPS> (clear)
CLIPS> 
(deftemplate country-info
   (slot country) 
   (multislot color))
CLIPS> 
(deffacts country
   (country-info (country USA) (color red white blue))
   (country-info (country Belgium) (color black yellow red))
   (country-info (country Poland) (color white red))
   (country-info (country Monaco) (color white red))
   (country-info (country Sweden) (color yellow blue))
   (country-info (country Panama) (color white blue red)) 
   (country-info (country Jamacia) (color black yellow green))
   (country-info (country Colombia) (color blue yellow red))
   (country-info (country Italy) (color black yellow red))
   (country-info (country Ireland) (color green white orange))
   (country-info (country Botswana) (color blue white black)))
CLIPS> 
(defrule color 
   => 
   (printout t "Color? ")
   (assert (color (read))))
CLIPS> 
(defrule check-input
   (color ?color) 
   (country-info (country ?country) (color $? ?color $?))
   =>
   (printout t "   " ?country crlf))
CLIPS> (reset)
CLIPS> (run)
Color? red
   Italy
   Colombia
   Panama
   Monaco
   Poland
   Belgium
   USA
CLIPS> 

Upvotes: 1

Related Questions