Hi Joao,

This is easy enough.  Try this..

(clear)
(watch all)
(deftemplate person
  (slot name)
  (slot age))

; Your queries
(defquery person-by-age
  (declare (variables ?_age))
  (person (name ?name) (age ?age&:(> ?age ?_age))))

(defquery find-oldest
  (person (name ?name1) (age ?age1))
  (not (person (name ?name2) (age ?age2&:(> ?age2 ?age1)))))

; Load some facts
(deffacts init
  (person (name Ann) (age 12))
  (person (name Bob) (age 14))
  (person (name Carl) (age 8))
  (person (name David) (age 11))
  (person (name Ed) (age 9)))

; Reset the rule engine to load our facts
(reset)

; Get the result sets for the queries
(bind ?result1 (run-query* person-by-age 10))
(bind ?result2 (run-query* find-oldest))

; Print out the results
(while (?result1 next)
    (printout t
      (?result1 getString name) ", age "
      (?result1 getInt age) crlf))

(while (?result2 next)
    (printout t "Oldest is: "
      (?result2 getString name1) ", age "
      (?result2 getInt age1) crlf))

/** OUTPUT
Jess> (batch age.clp)
MAIN::person-by-age: +1+1+1+2+t
MAIN::find-oldest: +1+1=1+2+2+t
 ==> Focus MAIN
 ==> f-0 (MAIN::initial-fact)
 ==> f-1 (MAIN::person (name Ann) (age 12))
 ==> f-2 (MAIN::person (name Bob) (age 14))
 ==> f-3 (MAIN::person (name Carl) (age 8))
 ==> f-4 (MAIN::person (name David) (age 11))
 ==> f-5 (MAIN::person (name Ed) (age 9))
 ==> f-6 (MAIN::__query-trigger-person-by-age 10)
 <== f-6 (MAIN::__query-trigger-person-by-age 10)
 ==> f-7 (MAIN::__query-trigger-find-oldest)
 <== f-7 (MAIN::__query-trigger-find-oldest)
Ann, age 12
Bob, age 14
David, age 11
Oldest is: Bob, age 14
FALSE

**/

Cheers,
Jason

-----------------------------------------------------------
Morris Technical Solutions LLC
[EMAIL PROTECTED]
(517) 304-5883

Reply via email to