如何在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))
我想知道如何在 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))