如何在clojure中生成n个线程

How to generate n threads in clojure

我想知道如何在 clojure 中创建 n 个线程。有一个名为"estimate-value"的函数,它可以估计一个值,return结果。 现在我想用pmap或pcalls创建n个线程,每个线程可以计算一个估计值,然后将n个结果和return结合起来得到最终的估计值。 我的代码是

(defn compute-value [n]
    (/ (apply + (pmap (estimate-value) (range n))) n))

我确定函数估计值是正确的。但是当我 运行 出现错误时:

user=> (compute-value 3)
ClassCastException java.lang.Double cannot be cast to clojure.lang.IFn  clojure.core/pmap/fn--6744/fn--6745 (core.clj:6729)

如何修复这个计算值函数?谢谢!

你的代码看起来不错,除了一个小问题,

(pmap (estimate-value) (range n))

这首先评估 (estimate-value) 一次,我假设 returns 一个 double,然后它尝试使用 double 作为 [=15= 的函数], 这是您看到的错误 java.lang.Double cannot be cast to clojure.lang.IFn.

您只需将其包装在一个函数中,如下所示:

(pmap (fn[x](estimate-value)) (range n))