全然 clojure ってみてない
Clojure はへろーわーるどを書けるとこからまんじりとも進んでないのでちょっと勉強することにしたようなしてないような。
多分、三日坊主になる。
fn を使った map
(map (fn [x] (+ 2 x) [1 2 3])) ;; => (3 4 5)
角括弧で囲まれた要素と丸括弧で囲まれた要素の違いすらよく分かってないんですが、map 関数です。
Ruby で書くとこんな感じ:
[ 1, 2, 3 ].map { |x| x + 2 } # => [ 3, 4, 5 ]
reader マクロを使った map
(map #(+ 2 %) [1 2 3]) ;; => (3 4 5)
やっていることは fn
を使った map
と丸っきり同じです。
えーと、えーと、#(+ 2 %)
の %
がプレースホルダーになってるんじゃないか的なそんな感じです。
partial を使った map
(map (partial + 2) [1 2 3]) ;; => (3 4 5)
部分適用できるようなそんな感じ?
comp を使った map
(map (comp - *) [2 4 6] [1 2 3]) ;; => (-2 -8 -18)
map
の第ニ引数と第三引数の要素を掛け算してるのは分かったけど…
マイナス??
いや、comp の第一引数がどうかなってるのは分かるんだけど…
(map (comp * -) [2 4 6] [1 2 3]) ;; => (1 2 3)
という風に comp
の引数を逆にしたら、(1 2 3)
が返ってきた…。
なんだこりゃ…。
complement を使った map
(map (complement zero?) [3 2 1 0]) ;; => (true true true false)
zero?
で返ってくるはずの値とは逆の値のリスト?になってる。
constantly を使った map
(map (constantly 9) [1 2 3]) ;; => (9 9 9)
多分、要素に関わらず、constantly
に渡した引数が入るんだと思う。