(defun unify (u v) (unifyb u v '((t . t))))
; unify terms: subs list or NIL if failure (defun unifyb (u v subs) ; works if: (or (and (eq u v) subs) ; identical vars (varunify v u subs) ; u is a var (varunify u v subs) ; v is a var (and (consp u) (consp v) ; both are fns (eq (car u) (car v)) ; with same name (unifyc (cdr u) (cdr v) subs))) ) ;args (defun unifyc (args1 args2 subs) ; unify arg lists (if (null args1) ; if args1 empty (if (null args2) subs) ; args2 must be (and args2 subs ; unify first args (let ((newsubs (unifyb (car args1) (car args2) subs))) (unifyc (sublis newsubs (cdr args1)) (sublis newsubs (cdr args2)) newsubs))) )) (defun varunify (term var subs) ; unify with var (and var (symbolp var) (not (occurs var term)) (cons (cons var term) (subst term var subs))))
Contents    Page-10    Prev    Next    Page+10    Index