mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 09:10:22 +02:00
(span): Change to a tail-recursive form.
This commit is contained in:
parent
ee0301df8c
commit
379b03074e
1 changed files with 5 additions and 6 deletions
|
@ -617,12 +617,11 @@
|
||||||
clist)))
|
clist)))
|
||||||
|
|
||||||
(define (span pred clist)
|
(define (span pred clist)
|
||||||
(if (null? clist)
|
(let lp ((clist clist) (rl '()))
|
||||||
(values '() '())
|
(if (and (not (null? clist))
|
||||||
(if (pred (car clist))
|
(pred (car clist)))
|
||||||
(receive (first last) (span pred (cdr clist))
|
(lp (cdr clist) (cons (car clist) rl))
|
||||||
(values (cons (car clist) first) last))
|
(values (reverse! rl) clist))))
|
||||||
(values '() clist))))
|
|
||||||
|
|
||||||
(define (span! pred list)
|
(define (span! pred list)
|
||||||
(span pred list)) ; XXX:optimize
|
(span pred list)) ; XXX:optimize
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue