(def defn (mac (name args . body) (list 'def name (cons 'fn (cons args body))))) (defn map-aux (f acc l) (if (nil? l) (acc f '()) (map-aux f (fn (f ys) (acc f (cons (f (head l)) ys))) (tail l)))) (defn map (f l) (map-aux f (fn (f x) x) l)) (println (map (fn (x) (* x x)) '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)))