| form | source form |
|---|---|
| alist | substitutions |
(substitute '(* (+ 5 7) 9) '(((+ 5 7) . 12))) => (* 12 9)
(define (substitute x a)
(cond ((assoc x a) => cdr)
((pair? x)
(cons (substitute (car x) a)
(substitute (cdr x) a)))
(else x)))