;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
(defpackage #:anaphora
- (:use #:common-lisp)
- (:export #:it
- #:aif #:aif2 #:awhen #:awhen2
- #:aand #:awhile #:asetf #:acond))
+ (:use #:common-lisp))
(in-package #:anaphora)
+(export 'it)
+
+(export 'aif)
(defmacro aif (cond then &optional else)
"Bind `it' to result of COND when evaluating THEN or ELSE."
`(let ((it ,cond))
(if it ,then ,@(and else (list else)))))
+(export 'aif2)
(defmacro aif2 (cond then &optional else)
"Bind `it' to first value of COND; switch on second."
(let ((tmp (gensym)))
(declare (ignorable it))
(if ,tmp ,then ,@(and else (list else))))))
+(export 'awhen)
(defmacro awhen (cond &body body)
"Bind `it' to result of COND when evaluating BODY."
`(let ((it ,cond))
(when it ,@body)))
+(export 'awhen2)
(defmacro awhen2 (cond &body body)
"Bind `it' to first value of COND; switch on second."
(let ((tmp (gensym)))
(declare (ignorable it))
(when ,tmp ,@body))))
+(export 'aand)
(defmacro aand (&rest things)
"Like `and', with `it' bound to previous value."
(labels ((foo (things)
(foo things)
t)))
+(export 'awhile)
(defmacro awhile (cond &body body)
"Like `while', with `it' bound to value of COND in BODY."
`(loop
(unless it (return))
,@body)))
+(export 'asetf)
(defmacro asetf (&rest pairs &environment env)
"Set PLACE to value of FORM; in FORM, `it' is bound to current value of
PLACE."
(foo rest))))))
(cons 'progn (foo pairs))))
+(export 'acond)
(defmacro acond (&rest clauses)
"Like `cond', but in each clause the consequent has `it' bound to the value
of its guard."