#+name: 2025-07-01-00-50
#+begin_src emacs-lisp :results silent
(defmacro !let (bindings &rest body)
(declare (indent 1) (debug let))
(cond
((null bindings) `(progn ,@body))
(t
(let (vars vals)
(mapc
(lambda (binding)
(push (or (car-safe binding) binding) vars)
(push (car (cdr-safe binding)) vals))
bindings)
`(cl-macrolet
,(mapcar
(lambda (s)
`(,s (&rest args)
`(funcall ,',s ,@args)))
(nreverse vars))
(funcall
(lambda (,@(nreverse vars))
,@body)
,@(nreverse vals)))))))
#+end_src