summaryrefslogtreecommitdiff
path: root/srfi/srfi-1.scm
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2004-12-06 00:34:53 +0000
committerKevin Ryde <user42@zip.com.au>2004-12-06 00:34:53 +0000
commit379b03074e53b47928c8ae9b41099f09b69762ef (patch)
tree9ae1b77f0c26009df796fa8bc6c43157ff2f5b3a /srfi/srfi-1.scm
parentee0301df8cdfeb915535084efcf49a198d8a7663 (diff)
downloadguile-379b03074e53b47928c8ae9b41099f09b69762ef.tar.gz
(span): Change to a tail-recursive form.
Diffstat (limited to 'srfi/srfi-1.scm')
-rw-r--r--srfi/srfi-1.scm11
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