diff options
author | Boutade <thegoofist@protonmail.com> | 2019-09-27 14:00:57 -0500 |
---|---|---|
committer | Boutade <thegoofist@protonmail.com> | 2019-09-27 14:00:57 -0500 |
commit | 5cb532ecac85fec24815f8326718436a444fa9b1 (patch) | |
tree | a6e3b60f30f63049a147be0301a03d1e2401167e | |
parent | cee07c415eafd0a1111ddb02c15d3a8fc357383e (diff) |
change let-cond macro
-rw-r--r-- | macros.lisp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/macros.lisp b/macros.lisp index 4466105..bfad6e7 100644 --- a/macros.lisp +++ b/macros.lisp @@ -1,11 +1,17 @@ (in-package :granolin) -(defmacro let-cond ((var) &body forms) - `(let (,var) - (cond - ,@(loop :for form :in forms - :collect (destructuring-bind (test . actions) form - `((setf ,var ,test) ,@actions)))))) +(defmacro let-cond (&body forms) + (let ((tmp-var (gensym))) + `(let (,tmp-var) + (cond + ,@(loop :for (var test . body) :in forms + :if (eq var t) + :collect (list* t (cons test body)) + :else + :collect `((setf ,tmp-var ,test) + (let ((,var ,tmp-var)) + ,@body))))))) + (defmacro let-when ((var test) &body body) `(let ((,var ,test)) (when ,test ,@body))) |