我有一个我想多次运行的函数,生成一个结果列表:
(take 10 (repeatedly #(myfunc)))
我意识到我可以与pmap
:
(pmap (fn [_] (myfunc)) (range 10))
但它有点不整洁。是否有标准功能可以让我这样做:
(prun 10 #(myfunc))
答案 0 :(得分:2)
您可能也对The Claypoole library感兴趣管理线程池和并行处理。查看他们的pmap
版本和pfor
。
答案 1 :(得分:1)
我认为现有功能并不存在,但使用pcalls
而不是pmap
似乎更接近您想要的功能:
(defn prun [n f]
(apply pcalls (repeat n f)))
您不需要在myfunc
,btw的调用中使用#()
包裹repeatedly
,也不需要按照上面的定义调用prun
:
(prun 10 myfunc)
您可能会发现pvalues
也很有用。
答案 2 :(得分:0)
您可以使用dotimes
(dotimes [_ 10] (myfunc))
这将运行您的函数 10 次。确保在与你的函数相同的命名空间中运行它