ref: c588f67dd266c25cca8634d03f259a38573a1c7e
parent: ae9998e6063d7ee3d2cdc95c45236f26515c0e7f
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Thu Apr 24 09:45:49 EDT 2025
subseq: fix to work on circular lists
--- a/boot/sl.boot
+++ b/boot/sl.boot
@@ -496,11 +496,11 @@
JD040<22Q;3:04730r252;J704022Q:" #(unquote-splicing
unquote-nsplicing unquote length>) splice-form? 7)
str-join #fn("n20J5020:215022860<5242324861>20=524258661:" #("" #fn(buffer)
- #fn(for-each)
+ #fn(for-each)
(io->str)) str-join 8)
str-lpad #fn("n3207182122051~52062:" #(#fn(str) str-rep #fn(str-length)) str-lpad 10)
str-map #fn("n2205021151EI8887L23O0422860231885251524748851?8@\f/^14258661:" #(#fn(buffer)
--length) #fn(io-putrune) #fn(str-rune) 1+ #fn(io->str)) str-map 13)
+str-length) #fn(io-putrune) #fn(str-rune) 1+ #fn(io->str)) str-map 13)
p #fn("n21r4L23b0701E5235021:1Kl238022061:1r2l2390220062:2200063:731513@02207401K~5262:742200521r2j262:" #(<=
"" #fn(str) odd? str-rep) str-rep 10)
str-rpad #fn("n32007182122051~5262:" #(#fn(str) str-rep #fn(str-length)) str-rpad 11)
--- a/src/system.sl
+++ b/src/system.sl
@@ -554,7 +554,7 @@
(for start (1- end)
(λ (i) (aset! av (- i start) (aref seq i))))
av))
- (cond ((list? seq) (subseq-l seq start))
+ (cond ((cons? seq) (subseq-l seq start))
((vec? seq) (subseq-av vec-alloc))
((arr? seq) (let {[atype (cadr (type-of seq))]}
(subseq-av (λ (n) (arr-alloc atype n 0)))))))
--- a/test/unittest.sl
+++ b/test/unittest.sl
@@ -468,6 +468,9 @@
(assert (not (subseq NIL 0)))
(assert (equal? (subseq (apply vec (iota 10)) 10) (vec)))
(assert (equal? (subseq (vec) 0) (vec)))
+(def cl '(1 2 3))
+(set-cdr! (cddr cl) cl)
+(assert (equal? (subseq cl 1 8) '(2 3 1 2 3 1 2)))
;; map with different return types
(assert (equal? (map 'vec + '(1 2 3) '(4 5 6) '(7 8 9)) (vec 12 15 18)))