transcendental-lisp/lisp/lang/dlambda.lisp

16 lines
501 B
Common Lisp
Raw Normal View History

;; This is based on the dlambda macro presented in "Let Over Lambda" by Doug Hoyte.
2017-03-08 11:14:44 -05:00
(defmacro dlambda (&rest methods)
(let ((arguments (gensym)))
2017-03-07 16:27:11 -05:00
`(lambda (&rest ,arguments)
(case (first ,arguments)
,@(mapcar
(lambda (method)
`(,(first method)
(apply (lambda ,@(rest method))
,(if (equal t (first method))
arguments
`(rest ,arguments)))))
methods)))))