Clojure では、行列の可能な表現はベクトルのベクトル、つまり[[1 2] [3 4]]
. 行列の転置の可能な実装は次のようになります。
(defn transpose [matrix]
(loop [matrix matrix, transp [], i 0]
(if (< i (count (nth matrix 0)))
(recur matrix
(conj transp
(vec (reduce concat
(map #(conj [] (nth %1 i))
matrix))))
(inc i))
transp)))
もっと慣用的な Clojure の実装を考えられる人はいますか? たとえば、この恐ろしいループの再発を避けるには?