diff options
author | Kevin Ryde <user42@zip.com.au> | 2004-12-04 23:05:04 +0000 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2004-12-04 23:05:04 +0000 |
commit | 558d5c03464e08cc748fd447762ba17f1bd10f5f (patch) | |
tree | 701b2e61f6e2713e1f614f8ed3f6021d59939b32 | |
parent | a52ef9e4a019acba75f10725d9702fb77aa245f1 (diff) | |
download | guile-558d5c03464e08cc748fd447762ba17f1bd10f5f.tar.gz |
(append-map, append-map!): Rewrite as simple "apply append" forms, for
tail recursiveness.
-rw-r--r-- | srfi/srfi-1.scm | 23 |
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) |