Clojure > Archives > 2010/04/21

2010/04/21 01:16:57 UTCshiro
#
そうか、Schemeの場合、consではなくstream-consを使うのでその時点でPromiseになっている。そこにdelayをかぶせることで問題が生じる。なので全体を囲うのはlazy :: Promise -> Promise でなければならない。
#
Clojureの場合、consが返すのは通常の値なので、lazy-seqでどこを囲んでも構わない。
2010/04/21 06:13:18 UTCfatrow
#
やった。取りあえず何か思うところがない限り lazy-seq は一番外側にって覚えておこう。よく理解できてないけど。
2010/04/21 06:25:06 UTCfatrow
#
http://www.katch.ne.jp/~leque/translations/srfi-45/srfi-45j.html
 難しい…。
#
> line-seqで問題が出るのはreadLineに副作用があるから
副作用があるから問題が出たというよりは、問題が明るみになったんじゃないかな。余分に計算するっていうのはバグまでは行かなくても望まれていないし。
#
(defn lazy1 [x]
  (println x)
  (lazy-seq (cons x (lazy1 (inc x)))))

(defn lazy2 [x]
  (lazy-seq
    (println x)
    (cons x (lazy2 (inc x)))))

user> (doall (take 2 (lazy1 1)))
1
2
3
(1 2)
user> (doall (take 2 (lazy2 1)))
1
2
(1 2)
#
改行入れると紫になるのかな