私は最近 Clojure の学習を始めたばかりなので、これが少し初歩的である場合は申し訳ありません。
誰かが私に次の違いを説明してもらえますか:
=> (def a (lazy-cat
[0]
(map inc a)
))
=> (take 5 a)
(0 1 2 3 4)
と
=> (def b (lazy-cat
[0]
(map #(inc (nth b %)) (range))
))
=> (take 5 b)
IndexOutOfBoundsException clojure.lang.RT.nthFrom (RT.java:773)
2 番目の例は、b の最初の要素を使用して 2 番目の要素を計算し、次に 2 番目の要素を使用して 3 番目の要素を計算するという同じ方法で機能することを期待していました。私の理解では、clojure は b の 3 番目の要素を計算しようとさえせず、2 番目の要素に値を代入して画面に表示するまでは試行しませんでした。
ここの舞台裏で実際に何が起こっているかについて、誰かが説明してくれるとありがたいです。
ありがとう :)