summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-02-05 16:11:00 -0800
committerKaz Kylheku <kaz@kylheku.com>2017-02-05 16:11:00 -0800
commit38bb7375b93b048be6331e3376e091e7506e0fde (patch)
tree4e9245ddd5b5a4d5844386b5512489a5f3fca40f
parent70ddb25b6534b1dbf0e69b53dc768a80bb4838e0 (diff)
downloadtxr-38bb7375b93b048be6331e3376e091e7506e0fde.tar.gz
txr-38bb7375b93b048be6331e3376e091e7506e0fde.tar.bz2
txr-38bb7375b93b048be6331e3376e091e7506e0fde.zip
Adding whena macro.
We have ifa and conda; whena is conspicuously absent. * lisplib.c (ifa_set_entries): Add autoload entry for whena. * share/txr/stdlib/ifa.tl (whena): New macro. * txr.1: Documented whena.
-rw-r--r--lisplib.c4
-rw-r--r--share/txr/stdlib/ifa.tl3
-rw-r--r--txr.117
3 files changed, 23 insertions, 1 deletions
diff --git a/lisplib.c b/lisplib.c
index abdd8c1c..d5f0d1d1 100644
--- a/lisplib.c
+++ b/lisplib.c
@@ -106,7 +106,9 @@ static val ver_instantiate(val set_fun)
static val ifa_set_entries(val dlt, val fun)
{
- val name[] = { lit("ifa"), lit("conda"), lit("condlet"), nil };
+ val name[] = {
+ lit("ifa"), lit("whena"), lit("conda"), lit("condlet"), nil
+ };
set_dlt_entries(dlt, name, fun);
return nil;
}
diff --git a/share/txr/stdlib/ifa.tl b/share/txr/stdlib/ifa.tl
index 170e8eb5..e99d5d40 100644
--- a/share/txr/stdlib/ifa.tl
+++ b/share/txr/stdlib/ifa.tl
@@ -66,6 +66,9 @@
(if (,sym ,*(if (eq 'dwim sym) ^(,(second test)))
,*temps) ,then ,else)))))))))
+(defmacro whena (test . body)
+ ^(ifa ,test (progn ,*body)))
+
(macro-time
(defun sys:if-to-cond (if-oper cond-oper pairs)
(tree-case pairs
diff --git a/txr.1 b/txr.1
index 65c6c940..9bdc0cd4 100644
--- a/txr.1
+++ b/txr.1
@@ -14283,6 +14283,23 @@ as well as the anaphoric
.code it
variable feature.
+.coNP Macro @ whena
+.synb
+.mets (whena < test << form *)
+.syne
+.desc
+The
+.code whena
+macro is similar to the
+.code when
+macro, except that it is anaphoric in exactly the same manner as the
+.code ifa
+macro. It may be understood as conforming to the following equivalence:
+
+.cblk
+ (whena x f0 f2 ...) <--> (if x (progn f0 f2 ...))
+.cble
+
.coNP Macro @ dotimes
.synb
.mets (dotimes >> ( var < count-form <> [ result-form ]) << body-form *)