(fn map [f l] `(icollect [i# v# (ipairs ,l)] (,f i# v#))) (fn filter [f l] `(icollect [i# v# (ipairs ,l)] (if (,f i# v#) v# nil))) (fn reduce [f l s] `(accumulate [r# ,s i# v# (ipairs ,l)] (,f i# v# r#))) {: map : filter : reduce}