sublis can be used to write code by instantiating design patterns. For example, we can instantiate a test-accumulate pattern to make various counting functions:
(define pattern '(define (?fun tree) (if (pair? tree) (?combine (?fun (car tree)) (?fun (cdr tree))) (if (?test? tree) ?trueval ?falseval))))Contents    Page-10    Prev    Next    Page+10    Index   >(sublis '((?fun . nsymbols) (?combine . +) (?test? . symbol?) (?trueval . 1) (?falseval . 0)) pattern)
(define (nsymbols tree) (if (pair? tree) (+ (nsymbols (car tree)) (nsymbols (cdr tree))) (if (symbol? tree) 1 0)))