summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/lib.c b/lib.c
index 6168bb52..0cff2bb5 100644
--- a/lib.c
+++ b/lib.c
@@ -2021,18 +2021,23 @@ val partition_star(val seq, val indices)
if (indices == zero)
return cons(nullify(rest(seq)), nil);
- if (!seqp(indices)) {
+ if (!seqp(indices))
indices = cons(indices, nil);
- } else {
- while (eql(car(indices), base)) {
- seq = nullify(cdr(seq));
- if (!seq)
- return nil;
- base = plus(base, one);
- pop(&indices);
- }
+
+ while (indices && lt(car(indices), zero))
+ pop(&indices);
+
+ while (indices && eql(car(indices), base)) {
+ seq = nullify(cdr(seq));
+ if (!seq)
+ return nil;
+ base = plus(base, one);
+ pop(&indices);
}
+ if (!indices)
+ return cons(seq, nil);
+
return make_lazy_cons(func_f1(cons(seq, cons(indices, base)),
partition_star_func));
}