diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2020-06-28 11:47:13 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2020-06-28 11:47:13 -0700 |
commit | 931ee402f18da5c2eeeefb5d6f1217c833e04508 (patch) | |
tree | 7f7331a7e3484faa9a13c530b87c6aa4df4c765d | |
parent | a6a7e5ea61164c2f721fa353c578aeb2688f04a3 (diff) | |
download | txr-931ee402f18da5c2eeeefb5d6f1217c833e04508.tar.gz txr-931ee402f18da5c2eeeefb5d6f1217c833e04508.tar.bz2 txr-931ee402f18da5c2eeeefb5d6f1217c833e04508.zip |
New function: maprodo.
maprodo is like maprod, but doesn't collect or return
anything. It's the Cartesian product analog of mapdo.
* eval.c (collect_nothing, maprodo): New static functions.
(eval_init): Register maprodo intrinsic.
* txr.1: Documented.
-rw-r--r-- | eval.c | 12 | ||||
-rw-r--r-- | txr.1 | 28 |
2 files changed, 33 insertions, 7 deletions
@@ -5463,6 +5463,17 @@ val maprendv(val fun, struct args *lists) return prod_common(fun, lists, list_collect_append, mappendv); } +static loc collect_nothing(loc ptail, val obj) +{ + (void) obj; + return ptail; +} + +static val maprodo(val fun, struct args *lists) +{ + return prod_common(fun, lists, collect_nothing, mappendv); +} + static val symbol_value(val sym) { uses_or2; @@ -6535,6 +6546,7 @@ void eval_init(void) reg_fun(intern(lit("mapdo"), user_package), func_n1v(mapdov)); reg_fun(intern(lit("maprod"), user_package), func_n1v(maprodv)); reg_fun(intern(lit("maprend"), user_package), func_n1v(maprendv)); + reg_fun(intern(lit("maprodo"), user_package), func_n1v(maprodo)); reg_fun(intern(lit("window-map"), user_package), func_n4(window_map)); reg_fun(intern(lit("window-mappend"), user_package), func_n4(window_mappend)); reg_fun(intern(lit("window-mapdo"), user_package), func_n4(window_mapdo)); @@ -32131,25 +32131,28 @@ and so doesn't return. -> (2 4) .brev -.coNP Functions @ maprod and @ maprend +.coNP Functions @, maprod @ maprend and @ maprodo .synb .mets (maprod < function << iterable *) .mets (maprend < function << iterable *) +.mets (maprodo < function << iterable *) .syne .desc The -.code maprod -and +.codn maprod , .code maprend +and +.code maprodo functions resemble -.code mapcar +.codn mapcar , +.code mappend and -.codn mappend , +.codn mapdo , respectively. When given no .meta iterable arguments or exactly one .meta iterable -argument, they behave exactly like those two functions. +argument, they behave exactly like those three functions. When two or more .meta iterable @@ -32157,7 +32160,9 @@ arguments are present, .code maprod differs from .code mapcar -in the following way. Whereas +in the following way, as do the remaining functions +from their aforementioned counterparts. +Whereas .code mapcar iterates over the .meta iterable @@ -32216,6 +32221,15 @@ and the final result is converted to the same kind of sequence as the leftmost .meta iterable if possible. +The +.code maprodo +function, like +.codn mapdo , +ignores the result of +.meta function +and returns +.codn nil . + The combination iteration gives priority to the rightmost .metn iterable , which means that the rightmost element of each generated tuple varies |