diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2014-01-21 21:27:49 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2014-01-21 21:27:49 -0800 |
commit | a229461d0aff75401d3164c286a5f0960238199e (patch) | |
tree | 454acef5d3afbbd8c07ff032cc37c67b2d0bc8db /eval.c | |
parent | dd108fe76bf8c124ec7d68ed0a346c54c01ad182 (diff) | |
download | txr-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.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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); } |