まずは、2次元配列的なものを作ってみる。
user=> (def aa [[1 \a] [2 \b]]) #'user/aa user=> aa [[1 \a] [2 \b]]
これを、一個ずつ取り出してみる。
user=> (for [x aa] (println x)) [1 a] [2 b] (nil nil)
で、上記[1 a]
、[2 b]
の第1要素だけをとりたい。
C言語とかはこういうときは2重ループでやるしかないが、Clojureは非常にシンプルに記述できる。
user=> (for [[x y] aa] (println x)) 1 2 (nil nil)
便利!
Clojureのdestructingの機能を使っていて、[[x y] aa]
は、Rubyのタプルみたいなものでx, y = aa
だ。
2重ループもスーパーシンプル。
user=> (for [i [1 2] j [3 4]] [i j]) ([1 3] [1 4] [2 3] [2 4])
一行だと分かりにくいので、改行してインデントしてみる。
(for [i [1 2] j [3 4]] [i j])
これRuby的に書くと
ret = [] for i in [1,2] for j in [3,4] ret.push([i,j]) end end ret
Clojure (LISP)は簡潔すぎるほど、簡潔にかけるな。 定義されている関数の仕様の理解が肝で、油断すると意味不明なプログラムになりそう。