Clojure map 関数

Clojureの話。
map関数って、集合の写像というか、全射みたいなものかと思っていた。
少なくとも、Rubyとかだと、Arrayの各要素に対して、あるブロック関数を適用して、Arrayを得る。


Clojureも、だいたい同じだけど、Clojureは複数のCollectionを引数にとれる。
つまり、複数の集合から、集合を返すことができる。
そこで各集合から、各要素のペアを作ることができるので、新しい組を作りなおすことができる。
なにが言いたいかというと、


例1 Rubyと同じような写像的使い方

(map #(* 2 %) [1 2 3 4 5 ] )
=>  (2 4 6 8 10)


例2 複数のコレクションから、別の組み方へ

(map #(list %1 %2 ) [ 1 2 3 4 5 6 7 ] [1 2 3 5 8 13 21 ] )
=>  ((1 1) (2 2) (3 3) (4 5) (5 8) (6 13) (7 21))

組み換えしました。
Indexを作るときとか、行列の転置のような操作をしたいときに便利そう。


という感じ。