在clojure中考虑以下代码:
(让[a(find-a),b(find-b)] (println a) (println b) )
其中b是序列。函数find-a中也有一些println语句。 我期望在标准输出中看到的是: 一个, find-a中println语句的结果, 湾 但是,我得到的是: 一个, b的一部分, find-a中println语句的结果, 其余的b。
这是由于对序列的懒惰评估吗?
答案 0 :(得分:6)
此代码中没有任何内容本身就是懒惰的 - 它应该以正确的顺序执行。
但是,根据a
和b
的内容,可能会在其中嵌入一些延迟内容,只有在(println a)
和(println b)
执行时才会执行。特别是,如果a
和b
是使用map或类似内容创建的延迟序列,那么序列的后续部分将仅在println内强制执行时进行评估声明。更具体地说,您需要描述a
和b
的内部结构。
我实际上怀疑问题可能是因为缓冲区未被刷新 - 请参阅Clojure - Side Effects Happening Out Of Order