summaryrefslogtreecommitdiff
path: root/srfi/srfi-1.scm
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2005-02-11 21:37:08 +0000
committerKevin Ryde <user42@zip.com.au>2005-02-11 21:37:08 +0000
commitb064377679c8e9cc702ab21db61b5f9024289900 (patch)
treef0285eaea76ce28ec886cffa7a427aa398698901 /srfi/srfi-1.scm
parent8ff017428db8fdd7e2e1a1df3bf19d45ea683a80 (diff)
downloadguile-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.scm8
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'.