我正在以 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”尚未定义。
请任何人指出我对正确方法的理解。