> (define (map f l) > (if (pair? l) > (cons (f (car l)) > (map f (cdr l))) > '())) > > whereas we used to have to write code like this in order to support long > lists without overflowing the stack: > > (define (map f l) > (let loop ((l l) (out '())) > (if (pair? l) > (loop (cdr l) (cons (f (car l)) out)) > (reverse out))))
Ignoring stack usage, is the first version faster or slower than the second? [ Or is the speed difference negligible? ] How 'bout using a side-effecting `reverse!` (like Lisp's nreverse)? Stefan