Clojure その8 for
if やったら for かな
とりあえず 1〜9 を表示するものを書いてみましょう
ちなみにScalaだとこんな感じ
object Main{ def main(args: Array[String]) = { for(i <- 1 to 10){ print(i) } } }
勘でClojureを記述してみる
(defn -main [] (for [i (range 1 10)] (print i)))
結果
$ lein run $
Oh...
Clojure の for は lazy-seq(遅延シーケンス)らしいので
この書き方はダメなんでしょうね
遅延シーケンスなので、この式が評価されたときに中身が評価されるのではなく、シーケンスの中身が評価された時に評価される。
forマクロ - t2ru's blog より引用
ということで
Clojure の正解はこちら
(defn -main [] (doseq [x (for [i (range 1 10)] i)] (print x)))
Clojureの方を動かせるまでに相当苦労しました
Clojureの文法よくわかってないからね。。。
おいしいClojure入門 (Software Design plus)
- 作者: ニコラ・モドリック,安部重成
- 出版社/メーカー: 技術評論社
- 発売日: 2013/09/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る