summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoutade <thegoofist@protonmail.com>2019-09-27 14:00:57 -0500
committerBoutade <thegoofist@protonmail.com>2019-09-27 14:00:57 -0500
commit5cb532ecac85fec24815f8326718436a444fa9b1 (patch)
treea6e3b60f30f63049a147be0301a03d1e2401167e
parentcee07c415eafd0a1111ddb02c15d3a8fc357383e (diff)
change let-cond macro
-rw-r--r--macros.lisp18
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)))