Clojure,懒惰的评估问题

kos*_*tas 3 clojure

考虑clojure中的以下代码:

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

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

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

mik*_*era 6

这段代码中没有任何东西本身就是懒惰的 - 它应该以正确的顺序执行.

然而,根据什么ab是否有可能是一些懒惰的嵌入到他们,这仅被执行时(println a)(println b)执行.特别是,如果ab是使用map或类似的东西创建的延迟序列,则只有在println语句中强制执行时才会评估序列的后面部分.为了提供更具体的,你需要描述的内部结构ab.

我实际上怀疑问题可能是因为缓冲区没有被冲洗 - 请参阅Clojure - 副作用发生故障