Plaster
New
List
Login
common-lisp
default
anonymous
2023.10.11 19:17:07
;; Newer version (defmacro mlet ((name lambda-list &body body) &body mlet-body &environment env) `(macrolet ((,name ,lambda-list `(macrolet ((,',name (&whole form &rest args &environment env) (declare (ignore args)) (funcall ,',(macro-function name env) form env))) ,(progn ,@body)))) ,@mlet-body)) ;; Usage #| (macrolet ((foo () 10)) (mlet (foo () `(+ 1 (foo))) (foo))) ;; => 11 |# ;; Old version #+nil (defmacro mlet ((name lambda-list &body body) &body mlet-body &environment env) (let ((transfer (gensym "MLET-TRANSFER"))) `(macrolet ((,transfer (&rest args &environment env) (funcall ,(macro-function name env) `(,',name ,@args) env)) (,name ,lambda-list `(macrolet ((,',name (&rest args) `(,',',transfer ,@args))) ,(progn ,@body)))) ,@mlet-body)))
Raw
Annotate
Repaste
Edit