Cool Example
Object-oriented programming with closures
Invented by Guy Steele in 1976
(defun make-account (&key (balance 0.0))
"Create an ACCOUNT object with one slot, BALANCE"
#'(lambda (message &rest args)
;; Object supports three methods or messages
(:deposit (incf balance (car args)))
(:withdraw (decf balance (car args)))
(defun send (object message &rest args)
(apply object message args))