diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2024-02-28 19:30:07 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2024-02-28 19:30:07 -0800 |
commit | e8dedb798f4333e5fc2c85e37c019600010b6f7d (patch) | |
tree | c6499430f6f0d553e011840f4fe700e10692e58d | |
parent | 2a1d54acebc62771ec1d67e942449cc268c0b568 (diff) | |
download | txr-e8dedb798f4333e5fc2c85e37c019600010b6f7d.tar.gz txr-e8dedb798f4333e5fc2c85e37c019600010b6f7d.tar.bz2 txr-e8dedb798f4333e5fc2c85e37c019600010b6f7d.zip |
partition-if: use seq_build for accumulating partitions.
* lib.c (partition_if_func): Instead of list_collect_decl
and make_like, use seq_build.
-rw-r--r-- | lib.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -3951,10 +3951,12 @@ static val partition_if_countdown_funv(val envcons, varg args) static val partition_if_func(val func, val lcons) { - list_collect_decl (out, ptail); + seq_build_t bu; us_cons_bind (prev_item, iter, lcons); - ptail = list_collect(ptail, prev_item); + seq_build_init(lit("partition-if"), &bu, iter); + + seq_add(&bu, prev_item); while (iter_more(iter)) { val next_item = iter_item(iter); @@ -3962,14 +3964,14 @@ static val partition_if_func(val func, val lcons) prev_item = next_item; if (different) break; - ptail = list_collect(ptail, next_item); + seq_add(&bu, next_item); iter = iter_step(iter); } us_rplacd(lcons, if2(iter_more(iter), make_lazy_cons_car_cdr(us_lcons_fun(lcons), prev_item, iter_step(iter)))); - us_rplaca(lcons, make_like(out, iter)); + us_rplaca(lcons, seq_finish(&bu)); return nil; } |