From f19cdb4fe25ac424bfe7d5862e761c391d299fbe Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Wed, 23 Apr 2008 17:06:42 +0000 Subject: [PATCH] a little better comment on filter svn: r9431 --- collects/scheme/private/list.ss | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/collects/scheme/private/list.ss b/collects/scheme/private/list.ss index 4716850ec3..b6b8b0aa8e 100644 --- a/collects/scheme/private/list.ss +++ b/collects/scheme/private/list.ss @@ -185,13 +185,12 @@ (raise-type-error 'filter "procedure (arity 1)" f)) (unless (list? list) (raise-type-error 'filter "proper list" list)) - ;; We use `reverse' because it's easy to - ;; overflow the internal stack using natural recursion. - ;; It's not clear that it matters, though... + ;; accumulating the result and reversing it is currently slightly + ;; faster than a plain loop (let loop ([l list] [result null]) - (cond - [(null? l) (reverse result)] - [else (loop (cdr l) (if (f (car l)) (cons (car l) result) result))]))) + (if (null? l) + (reverse result) + (loop (cdr l) (if (f (car l)) (cons (car l) result) result))))) ;; (build-vector n f) returns a vector 0..n-1 where the ith element is (f i). ;; The eval order is guaranteed to be: 0, 1, 2, ..., n-1.