Clojureのtake-nth

2014-02-12

問題

(def a "A0B1C2D3E4F5G6")

のaからアルファベットと数字を別々に取り出したいのだがどうしたらよいのか。

partition

最初、partitionを使うことを思いついた。

user> (partition 1 2 a)
((\A) (\B) (\C) (\D) (\E) (\F) (\G))

これでは具合が悪いのでflattenを使った。

user> (flatten (partition 1 2 a))
(\A \B \C \D \E \F \G)

数字を取り出す方法は

user> (partition 2 a)
((\A \0) (\B \1) (\C \2) (\D \3) (\E \4) (\F \5) (\G \6))

とした。

これでは具合が悪いので

user> (map second (partition 2 a))
(\0 \1 \2 \3 \4 \5 \6)

とした。

問題は解決したが冗長なような気がする。

take-nth

そこでtake-nthを使った。

user> (take-nth 2 a)
(\A \B \C \D \E \F \G)

数値の方はどうするか。しばらく悩んだが

user> (take-nth 2 (rest a))
(\0 \1 \2 \3 \4 \5 \6)

とした。

tags: clojure