From 38ccae7f2e8fdae39c9c3c2990b90c990a1489de Mon Sep 17 00:00:00 2001 Message-Id: <38ccae7f2e8fdae39c9c3c2990b90c990a1489de.1715821812.git.mdw@distorted.org.uk> From: Mark Wooding Date: Wed, 17 May 2006 19:40:14 +0100 Subject: [PATCH] base: New `until' macro does the obvious thing. Organization: Straylight/Edgeware From: Mark Wooding --- mdw-base.lisp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mdw-base.lisp b/mdw-base.lisp index 37a3068..e87c511 100644 --- a/mdw-base.lisp +++ b/mdw-base.lisp @@ -33,7 +33,7 @@ (defpackage #:mdw.base #:stringify #:mappend #:listify #:fix-pair #:pairify #:parse-body #:whitespace-char-p #:slot-uninitialized - #:nlet #:while #:case2 #:ecase2 + #:nlet #:while #:until #:case2 #:ecase2 #:with-gensyms #:let*/gensyms #:with-places #:locp #:locf #:ref #:with-locatives #:update-place #:update-place-after @@ -189,9 +189,11 @@ (defmacro nlet (name binds &body body) (defmacro while (cond &body body) "If COND is false, evaluate to nil; otherwise evaluate BODY and try again." - `(loop - (unless ,cond (return)) - ,@body)) + `(loop (unless ,cond (return)) (progn ,@body))) + +(defmacro until (cond &body body) + "If COND is true, evaluate to nil; otherwise evaluate BODY and try again." + `(loop (when ,cond (return)) (progn ,@body))) (compile-time-defun do-case2-like (kind vform clauses) "Helper function for `case2' and `ecase2'." -- [mdw]