;; This is based on the dlambda macro presented in "Let Over Lambda" by Doug Hoyte. (defmacro dlambda (&rest methods) (let ((arguments (gensym))) `(lambda (&rest, arguments) (case (first, arguments), @(mapcar (lambda (method)) `(, (first method)) (apply (lambda, @(rest method)), (if (equal t (first method))) arguments `(rest, arguments)) methods)))))