(defun substitute-bindings (bindings pattern) (cond ((null pattern) nil) ((variable-p pattern) (let ((v (get-binding pattern bindings))) (if v (substitute-bindings bindings ;; ここ (binding-val v)) ;; pattern))) ((atom pattern) pattern) (t (cons (substitute-bindings bindings (car pattern)) (substitute-bindings bindings (cdr pattern))))))これを用いて,二つのパターンのマッチングをとってひとつのデータに変換す るunifierを作る.
(defun unifier (x y) (substitute-bindings (unify x y) x))これを用いると,
<cl> (unifier '(?x ?y a) '(?y ?x ?x)) (A A A) <cl> (unifier '((?a * ?x ^ 2) + (?b * ?x) + ?c) '(?z + (4 * 5) + 3)) ((?A * 5 ^ 2) + (4 * 5) + 3)ということができるようになる.