summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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