summaryrefslogtreecommitdiff
path: root/srfi/srfi-1.scm
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2004-12-04 23:05:04 +0000
committerKevin Ryde <user42@zip.com.au>2004-12-04 23:05:04 +0000
commit558d5c03464e08cc748fd447762ba17f1bd10f5f (patch)
tree701b2e61f6e2713e1f614f8ed3f6021d59939b32 /srfi/srfi-1.scm
parenta52ef9e4a019acba75f10725d9702fb77aa245f1 (diff)
downloadguile-558d5c03464e08cc748fd447762ba17f1bd10f5f.tar.gz
(append-map, append-map!): Rewrite as simple "apply append" forms, for
tail recursiveness.
Diffstat (limited to 'srfi/srfi-1.scm')
-rw-r--r--srfi/srfi-1.scm23
1 files changed, 3 insertions, 20 deletions
diff --git a/srfi/srfi-1.scm b/srfi/srfi-1.scm
index 7f706a462..a937d1a4f 100644
--- a/srfi/srfi-1.scm
+++ b/srfi/srfi-1.scm
@@ -525,27 +525,10 @@
(define map1 map)
(define (append-map f clist1 . rest)
- (if (null? rest)
- (let lp ((l clist1))
- (if (null? l)
- '()
- (append (f (car l)) (lp (cdr l)))))
- (let lp ((l (cons clist1 rest)))
- (if (any1 null? l)
- '()
- (append (apply f (map1 car l)) (lp (map1 cdr l)))))))
-
-
+ (apply append (apply map f clist1 rest)))
+
(define (append-map! f clist1 . rest)
- (if (null? rest)
- (let lp ((l clist1))
- (if (null? l)
- '()
- (append! (f (car l)) (lp (cdr l)))))
- (let lp ((l (cons clist1 rest)))
- (if (any1 null? l)
- '()
- (append! (apply f (map1 car l)) (lp (map1 cdr l)))))))
+ (apply append! (apply map f clist1 rest)))
;; OPTIMIZE-ME: Re-use cons cells of list1
(define map! map)