clojure.contrib.seq-utils.indexed for n-dimension

第14回Formal Methods 勉強会で、
clojure.contrib.seq-utils.indexedのn次元版が欲しい、
とのことだったので試験実装。

http://gist.github.com/856980

ツリー構造を考えるときは、やたら再帰するんじゃなくて、
(map func list)
を使って下位のリストに関数適用するんだ、ってことが改めて分かった。

あと(reduce concat _)はデータ構造をフラットにするのに使える。


ただし、今回の実装では、密な構造しか想定してない。
中途半端なデータだと、以下のようになる。

n-indexed=> (n-indexed '((a (b1 b2)) (c d)))
((0 0 a) (0 1 (b1 b2)) (1 0 c) (1 1 d))