do中的map的意外输出

时间:2010-08-29 05:22:26

标签: clojure

为什么这不会产生我期望的输出?

(defn test-fn []
  (do
    (println "start")
    (map #(println (+ % 1)) '(1 2 3))
    (println "done")))

输出

start
done

我希望

start
2 3 4
done

1 个答案:

答案 0 :(得分:7)

map是懒惰的,而do并不强迫它。如果您想强制评估延迟序列,请使用doalldorun

(defn test-fn []
  (do
    (println "start")
    (dorun (map #(println (+ % 1)) '(1 2 3)))
    (println "done")))