Forward Chaining Example


(defvar *db*)         ; atomic facts
(defvar *rules*)

(defun assrt (fact)   ; assert a new fact
  (or (member fact *db*)  ; already known
      (progn
        (push fact *db*)  ; add fact to *db*
        (dolist (rule *rules*)
          (if (and (member fact (cdr rule))
                   (every #'(lambda (x)
                              (member x *db*))
                          (cdr rule)))
              (assrt (car rule)) ) ) ) ))


(setq *db* '())
(setq *rules* '((c a b) (e c d)))
> (assrt 'a)
> (assrt 'b)
> *db*
(C B A)
> (assrt 'd)
> *db*
(E D C B A)

Contents    Page-10    Prev    Next    Page+10    Index