summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-06-26 06:56:10 -0700
committerKaz Kylheku <kaz@kylheku.com>2014-06-26 06:56:10 -0700
commit3dbaecd359c584e1bcf650cdf53fb35253599e15 (patch)
treecdabf8284e140a72cd19e447bfab7ec7bde94f85 /eval.c
parent5b0ee1a4dcdad30c4554a9aaa17600ae3e8073d7 (diff)
downloadtxr-3dbaecd359c584e1bcf650cdf53fb35253599e15.tar.gz
txr-3dbaecd359c584e1bcf650cdf53fb35253599e15.tar.bz2
txr-3dbaecd359c584e1bcf650cdf53fb35253599e15.zip
* eval.c (mapcarv): Use mapcar_listout, so list_of_lists can be
a non-list sequence. (eval_init): Register transpose and zip as intrinsics. * lib.c (curry_12_1_v): New static function. (transpose, mapcar_listout): New functions. (mapcar): Redefined in terms of mapcar_listout. * lib.h (transpose, mapcar_listout): Declared. * txr.1: Documented transpose and zip.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index ec10d1e1..f62f87c9 100644
--- a/eval.c
+++ b/eval.c
@@ -2686,7 +2686,7 @@ val mapcarv(val fun, val list_of_lists)
if (!cdr(list_of_lists)) {
return mapcar(fun, nullify(car(list_of_lists)));
} else {
- val lofl = mapcar(func_n1(nullify), list_of_lists);
+ val lofl = mapcar_listout(func_n1(nullify), list_of_lists);
val list_orig = car(list_of_lists);
list_collect_decl (out, otail);
@@ -3315,6 +3315,8 @@ void eval_init(void)
reg_fun(call_s, func_n1v(call));
reg_fun(intern(lit("reduce-left"), user_package), func_n4o(reduce_left, 2));
reg_fun(intern(lit("reduce-right"), user_package), func_n4o(reduce_right, 2));
+ reg_fun(intern(lit("transpose"), user_package), func_n1(transpose));
+ reg_fun(intern(lit("zip"), user_package), func_n0v(transpose));
reg_fun(intern(lit("second"), user_package), func_n1(second));
reg_fun(intern(lit("third"), user_package), func_n1(third));