Pattern Matching
Pattern matching is the inverse of substitution: it tests to see whether an input is an instance of a pattern, and if so, how it matches.
>(match '(go ?expletive yourself)
'(go bleep yourself))
((?expletive bleep) (t t))
(match '(defn ?fun [tree]
(if (cons? tree)
(?combine (?fun (first tree))
(?fun (rest tree)))
(if (?test tree) ?trueval ?falseval)))
'(defn nnums [tree]
(if (cons? tree)
(+ (nnums (first tree))
(nnums (rest tree)))
(if (number? tree) 1 0))) )
((?falseval 0) (?trueval 1) (?test number?)
(?combine +) (?fun nnums) (t t))