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