18 lines
526 B
Common Lisp
18 lines
526 B
Common Lisp
(load "functions.lisp")
|
|
|
|
;; 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)))))
|