教えてもらった2パターンをそのまま書いてみる。
おお…確かにどちらでも動作する。しかも簡潔だ。
初めて使う関数がいくつかあるので、一つずつ見ていこう。
そういう用途であれば
という理解で良いのかな?
インデックスを見つつフィルタしたい場合に使えそうだ。
おお…確かにどちらでも動作する。しかも簡潔だ。
初めて使う関数がいくつかあるので、一つずつ見ていこう。
partition-all
前回、(partition 3 3 nil '(a b c d e f g h i k))
とやって3つ組に満たないkも結果に残すようにしていたが、そういう用途であれば
(partition-all 3 '(a b c d e f g h i k))
でよかったようだ。when, when-not
when
は 述語と何らかの値を取り、述語が真であればその値を、偽であればnilを返す関数のようだ。
when-not
はその逆。
> (when (= 1 1) :a) :a > (when (= 1 2) :a) nil > (when-not (= 1 2) :a) :a > (when-not (= 1 1) :a) nil
keep-indexed
keep-indexed
はmap-indexed
とほぼ同じだが、要素にnilが含まれていた場合除外するかどうかに違いがある、という理解で良いのかな?
インデックスを見つつフィルタしたい場合に使えそうだ。
> (keep-indexed #(if (odd? %1) %2) [:a :b :c :d :e]) (:b :d) > (map-indexed #(if (odd? %1) %2) [:a :b :c :d :e]) (nil :b nil :d nil)
mapcat
mapcat
はScalaでいうflatMap
みたいな関数か。> (map #(list % %) '(1 2 3 4 5)) ((1 1) (2 2) (3 3) (4 4) (5 5)) > (mapcat #(list % %) '(1 2 3 4 5)) (1 1 2 2 3 3 4 4 5 5)