diff options
author | Kevin Ryde <user42@zip.com.au> | 2005-02-11 21:37:08 +0000 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2005-02-11 21:37:08 +0000 |
commit | b064377679c8e9cc702ab21db61b5f9024289900 (patch) | |
tree | f0285eaea76ce28ec886cffa7a427aa398698901 /srfi/srfi-1.scm | |
parent | 8ff017428db8fdd7e2e1a1df3bf19d45ea683a80 (diff) | |
download | guile-b064377679c8e9cc702ab21db61b5f9024289900.tar.gz |
(reduce, reduce-right): Don't call f with ridentity, use
it only if lst is empty, per srfi and intended optimization reduce
represents over fold.
Diffstat (limited to 'srfi/srfi-1.scm')
-rw-r--r-- | srfi/srfi-1.scm | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/srfi/srfi-1.scm b/srfi/srfi-1.scm index 1004cd51e..8d8a21d72 100644 --- a/srfi/srfi-1.scm +++ b/srfi/srfi-1.scm @@ -511,10 +511,14 @@ (uf (g seed) (cons (f seed) lis)))))) (define (reduce f ridentity lst) - (fold f ridentity lst)) + (if (null? lst) + ridentity + (fold f (car lst) (cdr lst)))) (define (reduce-right f ridentity lst) - (fold-right f ridentity lst)) + (if (null? lst) + ridentity + (fold-right f (last lst) (drop-right lst 1)))) ;; Internal helper procedure. Map `f' over the single list `ls'. |