我想知道如何在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)
如何修复此计算值函数?谢谢!
答案 0 :(得分:2)
除了一个小问题之外,您的代码似乎还不错,
(pmap (estimate-value) (range n))
这首先评估(estimate-value)
一次,我假设返回double
,然后它尝试将double
用作pmap
的函数,这是错误你看到java.lang.Double cannot be cast to clojure.lang.IFn
。
你只需将它包装在一个函数中,如下所示:
(pmap (fn[x](estimate-value)) (range n))