diff options
author | Kevin Ryde <user42@zip.com.au> | 2004-12-06 00:34:53 +0000 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2004-12-06 00:34:53 +0000 |
commit | 379b03074e53b47928c8ae9b41099f09b69762ef (patch) | |
tree | 9ae1b77f0c26009df796fa8bc6c43157ff2f5b3a /srfi/srfi-1.scm | |
parent | ee0301df8cdfeb915535084efcf49a198d8a7663 (diff) | |
download | guile-379b03074e53b47928c8ae9b41099f09b69762ef.tar.gz |
(span): Change to a tail-recursive form.
Diffstat (limited to 'srfi/srfi-1.scm')
-rw-r--r-- | srfi/srfi-1.scm | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/srfi/srfi-1.scm b/srfi/srfi-1.scm index 056308b1d..a489bb490 100644 --- a/srfi/srfi-1.scm +++ b/srfi/srfi-1.scm @@ -617,12 +617,11 @@ clist))) (define (span pred clist) - (if (null? clist) - (values '() '()) - (if (pred (car clist)) - (receive (first last) (span pred (cdr clist)) - (values (cons (car clist) first) last)) - (values '() clist)))) + (let lp ((clist clist) (rl '())) + (if (and (not (null? clist)) + (pred (car clist))) + (lp (cdr clist) (cons (car clist) rl)) + (values (reverse! rl) clist)))) (define (span! pred list) (span pred list)) ; XXX:optimize |