使用pmap增加计数器但错过了值

时间:2015-08-09 03:13:29

标签: clojure

(swap! foo (fn [old] 3))

(pmap
 (fn [_] (swap! foo inc))
 (range 10000))

@foo        ;It prints 1027, which is smaller than 10000.

那么,为什么foo不是10003?

与懒惰有什么关系?

1 个答案:

答案 0 :(得分:3)

来自pmap的文档:

  

半懒惰,因为并行计算保持在消耗之前,但不是     除非需要,否则实现整个结果。仅适用于
    计算密集型函数,其中f的时间占主导地位     协调开销。

所以是的,它只是实现了一些元素。尝试将pmap包裹在doall中,您就会看到预期的结果。