mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
Merge pull request #945 from ekaitz-zarraga/concatenate!
Fix #944: concatenate! work with empty lists in any position
This commit is contained in:
commit
cc6a3d10e5
2 changed files with 11 additions and 6 deletions
|
@ -15,12 +15,13 @@
|
|||
(define (concatenate! lists)
|
||||
(if (null? lists)
|
||||
'()
|
||||
(let lp ((ls lists))
|
||||
(cond ((not (pair? (cdr ls)))
|
||||
(car lists))
|
||||
(else
|
||||
(set-cdr! (last-pair (car ls)) (cadr ls))
|
||||
(lp (cdr ls)))))))
|
||||
(fold (lambda (el acc)
|
||||
(cond
|
||||
((null? acc) el)
|
||||
((null? el) acc)
|
||||
(else (begin (set-cdr! (last-pair acc) el) acc))))
|
||||
(car lists)
|
||||
(cdr lists))))
|
||||
|
||||
(define (append-reverse rev tail)
|
||||
(if (null? rev) tail (append-reverse (cdr rev) (cons (car rev) tail))))
|
||||
|
|
|
@ -77,6 +77,10 @@
|
|||
(test 'a (append '() 'a))
|
||||
(test '(x y) (append '(x y)))
|
||||
(test '() (append))
|
||||
(test (list 'a) (append! '() (list 'a)))
|
||||
(test (list 'a 'b) (append! (list 'a) '() '() (list 'b)))
|
||||
(test (list 'x 'y) (append! (list 'x 'y)))
|
||||
(test '() (append!))
|
||||
(test '(c b a) (reverse '(a b c)))
|
||||
(test '((e (f)) d (b c) a) (reverse '(a (b c) d (e (f)))))
|
||||
(test '((one 1 odd) (two 2 even) (three 3 odd)) (zip '(one two three) '(1 2 3) '(odd even odd even odd even odd even)))
|
||||
|
|
Loading…
Add table
Reference in a new issue