1

我想知道如何在 clojure 中创建 n 个线程。有一个名为“estimate-value”的函数,它可以估计一个值并返回结果。现在我想使用 pmap 或 pcalls 创建 n 个线程,每个线程可以计算一个估计值,然后组合 n 个结果并返回最终估计值。我的代码是

(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)

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

4

1 回答 1

2

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

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

这首先评估(estimate-value)一次,我假设它返回 a double,然后它尝试将其double用作 的函数pmap,这是您看到的错误java.lang.Double cannot be cast to clojure.lang.IFn

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

(pmap (fn[x](estimate-value)) (range n))
于 2016-05-04T01:49:42.260 回答