TL;DR
- ClojureScript Koans で詰まった問題を、答えと考え方と一緒に残す。
- 関数を返す関数・関数を受け取る関数の問題と、
count、iterate、キーワードの文字列化で詰まった。
背景
ClojureScript の練習として ClojureScript Koans を解いた。思ったより問題が多い。詰まったときは、リポジトリや、Clojure Koans の解答例を参考にした。
検証
functions/7
(= 9 (((fn [] _)) 4 5))答えは + である。((fn [] +)) を評価すると + そのものが得られるので、それに 4 と 5 を渡すと 9 になる。
functions/9
(= 25 (_ (fn [n] (* n n))))答えは (fn [f] (f 5)) である。無名関数を受け取り、それに 5 を渡す関数を考えればよい。
higher-order-functions/10
(= "longest"
(reduce
(fn [a b] (if (< _) b a))
["which" "is" "the" "longest" "word"]))答えは (count a) (count b) である。文字列の長さを取る関数は length だと思っていたが、count だった。
lazy-sequences/7
(= (repeat 100 :foo)
(take 100 (iterate _ :foo)))答えは conj である。
destructuring/1
(= _ ((fn [[a b]] (str b a)) [:foo :bar]))答えは ":bar:foo" である。キーワードを str で文字列にすると、先頭の : も残る。これを知らなかった。