diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-02-05 16:11:00 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-02-05 16:11:00 -0800 |
commit | 38bb7375b93b048be6331e3376e091e7506e0fde (patch) | |
tree | 4e9245ddd5b5a4d5844386b5512489a5f3fca40f | |
parent | 70ddb25b6534b1dbf0e69b53dc768a80bb4838e0 (diff) | |
download | txr-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.c | 4 | ||||
-rw-r--r-- | share/txr/stdlib/ifa.tl | 3 | ||||
-rw-r--r-- | txr.1 | 17 |
3 files changed, 23 insertions, 1 deletions
@@ -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 @@ -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 *) |