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)

キーワード