summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-01-21 21:27:49 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-01-21 21:27:49 -0800
commita229461d0aff75401d3164c286a5f0960238199e (patch)
tree454acef5d3afbbd8c07ff032cc37c67b2d0bc8db /eval.c
parentdd108fe76bf8c124ec7d68ed0a346c54c01ad182 (diff)
downloadtxr-a229461d0aff75401d3164c286a5f0960238199e.tar.gz
txr-a229461d0aff75401d3164c286a5f0960238199e.tar.bz2
txr-a229461d0aff75401d3164c286a5f0960238199e.zip
* eval.c (mapcarv, mappendv): Convert output to type of leftmost
input sequence. * lib.c (make_like): New function. (reverse, remq, remql, remqual, remove_if, keep_if, mapcar, mapcon, mappend, set_diff): Convert output list to type of leftmost input sequence. * lib.h (make_like): Declared. * txr.1: Documented.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index e43bd2cc..8ac48da8 100644
--- a/eval.c
+++ b/eval.c
@@ -1828,6 +1828,7 @@ val mapcarv(val fun, val list_of_lists)
return mapcar(fun, car(list_of_lists));
} else {
val lofl = copy_list(list_of_lists);
+ val list_orig = car(list_of_lists);
list_collect_decl (out, otail);
for (;;) {
@@ -1837,7 +1838,7 @@ val mapcarv(val fun, val list_of_lists)
for (iter = lofl; iter; iter = cdr(iter)) {
val list = car(iter);
if (!list)
- return out;
+ return make_like(out, list_orig);
list_collect(atail, car(list));
*car_l(iter) = cdr(list);
}
@@ -1853,6 +1854,7 @@ static val mappendv(val fun, val list_of_lists)
return mappend(fun, car(list_of_lists));
} else {
val lofl = copy_list(list_of_lists);
+ val list_orig = car(list_of_lists);
list_collect_decl (out, otail);
for (;;) {
@@ -1862,7 +1864,7 @@ static val mappendv(val fun, val list_of_lists)
for (iter = lofl; iter; iter = cdr(iter)) {
val list = car(iter);
if (!list)
- return out;
+ return make_like(out, list_orig);
list_collect(atail, car(list));
*car_l(iter) = cdr(list);
}