3

考虑 clojure 中的以下代码:

(让 [a (find-a), b (find-b)] (println a) (println b) )

其中 b 是一个序列。在函数 find-a 中也有一些 println 语句。我希望在标准输出中看到的是:a,find-a 中 println 语句的结果,b。但是,我得到的是:a,b 的一部分,来自 find-a 中的 println 语句,b 的其余部分。

这是由于对序列的懒惰评估吗?

4

1 回答 1

6

这段代码中没有任何东西天生就是惰性的——它都应该以正确的顺序执行。

但是,取决于什么ab是否有一些惰性嵌入其中,只有在执行时(println a)才会(println b)执行。特别是,如果a和是用mapb或类似的东西创建的惰性序列,那么序列的后面部分只有在println语句中强制执行时才会被评估。更具体地说,您需要描述 和 的内部结构。ab

然而,我实际上怀疑问题可能是由于缓冲区没有被刷新 - 请参阅Clojure - Side Effects Happening Out Of Order

于 2012-04-24T08:31:09.233 回答