TL;DR
mapは、シーケンスの各要素に関数を適用した結果のシーケンスを返す。- 無名関数や自作した関数も渡せる。2 つ以上の引数を取る関数には、引数の数だけシーケンスを渡す。
内容
次は引数を 1 つだけ受け取る関数を各要素に順に適用する例である。
(map inc [1 2 3]) ; (2 3 4)無名関数も受け取れる。
(map (fn [x] (+ x 1)) [1 2 3]) ; (2 3 4)無名関数は #(…) という簡略記法でも書ける。% は引数を表す。
(map #(+ % 1) [1 2 3]) ; (2 3 4)2 つ以上の引数を取る関数も受け取れる。この場合、引数の数だけシーケンスを渡す。
(map (fn [x y]
(+ (Math/pow x 2)
(Math/pow y 2))) [1 2 3] [2 3 4])
; (5.0 13.0 25.0)自作した関数も渡せる。
(defn double-it [x]
(* x 2))
(defn sum-of-squares [x y]
(+ (Math/pow x 2)
(Math/pow y 2)))(map double-it [1 2 3]) ; (2 4 6)
(map sum-of-squares [1 2 3] [2 3 4]) ; (5.0 13.0 25.0)