clojure的map函数可以对集合进行变换处理
(range 10)
=> (0 1 2 3 4 5 6 7 8 9)
(map (partial + 1) (range 10))
=> (1 2 3 4 5 6 7 8 9 10)
其实clojure有个代替的函数pmap,使用了pmap之后对集合的操作将自动切换到线程池上并发执行,不过线程的切换也需要开销,如果任务粒度太小pmap反而会比map慢,大概慢10倍左右。
测试代码
(ns core)
(def start (.getTime (java.util.Date.)))
(last (pmap (fn [x]
(+ x (last (map (fn [x] (+ 1 x)) (range 10000000)))))
(range 100)))
(def end (.getTime (java.util.Date.)))
(println (/ (float (- end start )) 1000))