Contents    Page-10    Prev    Next    Page+10    Index   

Backchaining Code

backchain works as follows: if the goal is known to be a fact, return true. Otherwise, try rules to see if some rule has the goal as conclusion and has premises that are true (using backchain).


(defn backchain [goal rules facts]  ; true if
 (or (member goal facts)    ; goal is known fact
     (some            ; or there is some rule
       (fn [rule]     ;  that concludes
         (and (= (first rule) goal) ;  goal
              (every?  ; and every premise
                (fn [premise]  ; can be proved
                  (backchain premise rules facts))
                (rest rule))))
       rules)) )


>(backchain 'e '((c a b) (e c d)) '(a b d))
true

This form of backchaining is useful when there are relatively few rules but many facts, e.g. stored in a separate database.