diff --git a/flan-utils.lisp b/flan-utils.lisp index 2ed4ee1..3fe1dd0 100644 --- a/flan-utils.lisp +++ b/flan-utils.lisp @@ -48,7 +48,8 @@ (let ((errnm (gensym))) `(let ((,errnm (handler-case (cons ,try nil) (t (e) - (cons (progn ,@catch) e))))) + (let ((e e)) + (cons (progn ,@catch) e)))))) (if (cdr ,errnm) (values (car ,errnm) (cdr ,errnm)) (values (car ,errnm) nil))))) @@ -263,6 +264,13 @@ ;; --- progressive evals +(defmacro progex (funcs expr) + "run funcs on expr, return specified" + (let ((name (gensym))) + `(let ((,name ,expr)) + (mapcar #'(lambda (x) (funcall x ,name)) ,funcs) + ,name))) + (defmacro progen (&rest things) "mapn eval things" `(mapn #'eval '(,@things)))