Search code examples
clips

Clips range find between 2 json inputs


I want to implemen a rule ;

Lets assume that ı have one input.json it consist a name value pair.Example; { "quality":"300" }

I have another constant json ,Example [{ "up":"100", "down":"0", "data":"xx" }, { "up":"200", "down":"100", "data":"yy" }, , { "up":"300", "down":"200", "data":"zz" } ]

I am trying to find propert value for data for which up and down range. for this one ı, have to get zz because "quality":"300" is between 200-300.

how can ı success this one in clips rule.


Solution

  •          CLIPS (6.31 6/12/19)
    CLIPS> 
    (deftemplate pair
       (slot name)
       (slot value))
    CLIPS>    
    (deffacts pairs
       (pair (name "quality") (value 300)))
    CLIPS>       
    (deftemplate data
       (slot name)
       (slot up)
       (slot down))
    CLIPS>    
    (deffacts data-values
       (data (name "xx") (up 100) (down 0))
       (data (name "yy") (up 200) (down 100))
       (data (name "zz") (up 300) (down 200)))
    CLIPS> 
    (defrule in-range
       (pair (name "quality")
             (value ?value))
       (data (name ?name)
             (up ?up)
             (down ?down))
       (test (and (> ?value ?down) (<= ?value ?up)))
       =>
       (printout t ?name " is in range." crlf))
    CLIPS> (reset)
    CLIPS> (facts)
    f-0     (initial-fact)
    f-1     (pair (name "quality") (value 300))
    f-2     (data (name "xx") (up 100) (down 0))
    f-3     (data (name "yy") (up 200) (down 100))
    f-4     (data (name "zz") (up 300) (down 200))
    For a total of 5 facts.
    CLIPS> (agenda)
    0      in-range: f-1,f-4
    For a total of 1 activation.
    CLIPS> (run)
    zz is in range.
    CLIPS>