diff options
author | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-31 15:03:55 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-31 15:03:55 +0200 |
commit | 44694422755e946fd07ea2228259bbeebdb3302b (patch) | |
tree | 49afc596414915daabdf36acf1af4f2315fc2a09 /control-flow.lisp | |
parent | 4b66494c7bd3c0dd7757e75b282267c51d7129c0 (diff) |
Add MACROLET.
Diffstat (limited to 'control-flow.lisp')
-rw-r--r-- | control-flow.lisp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/control-flow.lisp b/control-flow.lisp index c8c18cb..b03a666 100644 --- a/control-flow.lisp +++ b/control-flow.lisp @@ -19,7 +19,7 @@ (in-package #:common-lisp) (export '(identity constantly complement tagbody go block return-from - defconstant prog prog*)) + defconstant prog prog* macrolet flet)) (defun identity (x) @@ -158,3 +158,20 @@ ,@declarations (tagbody ,@body)))) + + +(defmacro macrolet (bindings &body body) + `(%macrolet ,(mapcar (lambda (binding) + `(,(car binding) + ,@(make-defmacro-body (cadr binding) + (cddr binding)))) + bindings) + ,@body)) + +(defmacro flet (bindings &body body) + `(%flet ,(mapcar (lambda (binding) + `(,(car binding) + ,@(make-defun-body (cadr binding) + (cddr binding)))) + bindings) + ,@body)) |