1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 22:10:21 +02:00

(break): Change to a tail-recursive form.

This commit is contained in:
Kevin Ryde 2004-12-06 00:39:27 +00:00
parent 379b03074e
commit ba94ef0c7f

View file

@ -627,12 +627,11 @@
(span pred list)) ; XXX:optimize
(define (break pred clist)
(if (null? clist)
(values '() '())
(if (pred (car clist))
(values '() clist)
(receive (first last) (break pred (cdr clist))
(values (cons (car clist) first) last)))))
(let lp ((clist clist) (rl '()))
(if (or (null? clist)
(pred (car clist)))
(values (reverse! rl) clist)
(lp (cdr clist) (cons (car clist) rl)))))
(define (break! pred list)
(break pred list)) ; XXX:optimize