Plaster
New
List
Login
common-lisp
default
anonymous
2023.10.12 00:02:16
(defmacro tmlet ((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 (let ((,name ',transfer)) ,@body))) ,@mlet-body))) ;; Usage #| (macrolet ((foo () 10)) (tmlet (foo () `(+ 1 (,foo))) (foo))) ;; => 11 |# (defparameter *foo* (list 1 2 3)) (defmacro foo () '*foo*) (foo) ; => (1 2 3) (pop (foo)) ; => 1 (foo) ; => (2 3) (tmlet (foo () `(car (,foo))) (foo)) ; => 2 (tmlet (foo () `(car (,foo))) (incf (foo))) ; => 3 (foo) ; => 3 3
Raw
Annotate
Repaste
Edit