gpt4 book ai didi

clojure - Clojure 的懒惰评估发生了什么

转载 作者:行者123 更新时间:2023-12-03 18:23:33 24 4
gpt4 key购买 nike

我正在以 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”尚未定义。

请任何人指出我对正确方法的理解。

最佳答案

当 clojure 阅读器发现

 (def myvar (lazy-seq [1 2 (prn undefined-var)]))

它需要编译它,这就是它抛出错误的原因,因为未定义 undefined-var。在第一种情况下,它编译正常,但在您使用 seq 之前它不会执行。

关于clojure - Clojure 的懒惰评估发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com