From 38ccae7f2e8fdae39c9c3c2990b90c990a1489de Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 17 May 2006 19:40:14 +0100 Subject: [PATCH] base: New `until' macro does the obvious thing. --- 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 @@ #: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 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'." -- 2.11.0