;;@ignore
;; A pattern variable. Matches a datum iff the (optional)
;; predicate holds, and binds it to the supplied name. If the
;; name is already bound, matches a datum iff the predicate holds
;; and the datum is c{equal?} to the bound value.
(define (p:variable name #!optional predicate?)