Title: question on Jess backwardchaining

Hi all,
The rule program below returns only one of the three possible results for the "(statement1 ?name)" goal.
Is it possible to structure rules such that the program returns all possible results for a goal?

Thanks in advance,
Dariush Navabi

Rule Program:

(deftemplate statement1 (slot name))
(deftemplate statement2 (slot name))
(deftemplate statement3 (slot name))
(deftemplate statement4 (slot name))


(deffacts initfacts
 (statement3 (name ROB))
 (statement4 (name JOE))
 (statement3 (name TOM))
)

(do-backward-chaining statement1)
(do-backward-chaining statement2)

(defrule printSt1Name
 (statement1 (name ?name))
=>
 (printout t "THE NAME IS: " ?name crlf)
)

(defrule do-getSt1Name1
 (need-statement1 (name ?))
 (statement4 (name ?name))
=>
 (assert (statement1 (name ?name)))
 (printout t "statement4 name is: " ?name crlf)
)

; An attempt to make backward chaining continue after the first
; result. It did not work.
;
;(defrule tmp
; (explicit (statement1 (name ROB)))
; ;=>
; (assert (need-statement1 (name nil)))
; )
 
(defrule do-getSt1Name2
 (need-statement1 (name ?))
 (statement2 (name ?name))
=>
 (assert (statement1 (name ?name)))
 (printout t "statement2 name is: " ?name crlf)
)

(defrule do-getst2Name
 (need-statement2 (name ?))
 (statement3 (name ?name))
=>
 (assert (statement2 (name ?name)))
 (printout t "statement3 name is: " ?name crlf)
)

Reply via email to