【发布时间】:2013-01-11 17:19:36
【问题描述】:
我最近才开始学习 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)
我希望第二个示例以相同的方式运行,使用 b 的第一个元素计算第二个,然后使用第二个计算第三个。我的理解是,clojure 甚至不会尝试计算 b 的第三个元素,直到它已经为第二个元素分配了一个值并将其打印在屏幕上。
我希望有人能解释一下这里的幕后实际情况。
谢谢:)
【问题讨论】:
标签: clojure sequence lazy-evaluation