【发布时间】:2012-06-28 23:57:42
【问题描述】:
我正在以 clojure 方式扭曲我的旧 java/python 头。请帮我理解clojure的惰性特性。
=> (def myvar (lazy-seq [1 2 (prn "abc")]))
#'user/myvar
以上内容很容易理解。由于它是一个惰性序列,因此 (prn "abc") 不会被评估,因此不会打印任何内容。
=> (def myvar (lazy-seq [1 2 (prn undefined-var)]))
CompilerException java.lang.RuntimeException: Unable to resolve symbol: undefined-var in this context, compiling:(NO_SOURCE_PATH:1)
如您所见,上述内容将引发错误。为什么?
我的(错误)理解是,由于它是惰性的,因此(prn undefined-var)可以合法地在这里,即使“undefined-var”尚未定义。
请任何人指出我的理解正确的方法。
【问题讨论】: