[plt-scheme] Re: trying not to use eval - in a define-syntax
--- John Clements <clements at brinckerhoff.org> wrote:
> As for the index argument, you can add this in a
> similar way, just by
> writing a function. I'm calling it indexed-map
> rather than
> indexed-for-each because (unlike a for-each) it
> returns the list of
> results:
>
> (define indexed-for-each
> (lambda args
> (when (< (length args) 2)
> (error 'indexed-for-each "indexed for-each
> requires at least two
> arguments. Given: ~v" (length args)))
> (apply map (append args (list (build-list
> (length (cadr
> args))(lambda (x) x)))))))
You can also do it using fold:
(define (indexed-map fn list)
(vector-ref
(foldr (lambda (elt seed)
(match seed
[#(rest index)
(vector (cons (fn elt index) rest)
(add1 index))]))
'()
list)
0))
[Untested]
Noel
__________________________________________________
Do you Yahoo!?
HotJobs - Search new jobs daily now
http://hotjobs.yahoo.com/