[gambit-list] "Number of arguments exceeds implementation limit" error
Christian
christian at pflanze.mine.nu
Mon Sep 4 09:38:31 EDT 2006
At 12:13 Uhr -0500 03.09.2006, Bill Richter wrote:
>(apply append
> (filter-map (lambda (or-chain)
> ...)
> or-chains))
You can get rid of the intermediate lists and hence the necessity of
append'ing altogether by using fold(-right) and functions which take
a tail argument instead of always inserting '().
(define (filter-map/tail fn tail lis . morelis)
(if (null? morelis)
(let recur ((lis lis))
(cond ((null? lis) tail)
((pair? lis)
(let ((v (fn (car lis))))
(if v
(cons v
(recur (cdr lis)))
(recur (cdr lis)))))
(else
(error "improper list:" lis))))
(error "filter-map/tail with more than one input list is not
(yet) implemented")))
(fold-right (lambda (v tail)
(filter-map/tail (lambda (v)
(and (even? v)
(+ v 1)))
tail
v))
'()
'((1 2 3 4) (10 20 30 40) (100 200 300 400)))
; => (3 5 11 21 31 41 101 201 301 401)
Christian.
More information about the Gambit-list
mailing list