(set! map' (fn (f ix in out) (if (< ix (len in)) (let (elem (in ix) felem (f elem) newix (+ 1 ix)) (set! (out ix) felem) (map' f newix in out)) out))) (set! map (fn (f in) (map' f 0 in (arr)))) (let (a [1 2 3 4 5 6 7 8 9] f1 (fn (x) (* 10 x)) f2 (fn (x) (* x x))) (say (map f1 a)) (say (map f2 a)))