do中的map的意外输出

yay*_*wei 4 clojure

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

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

它输出

start
done
Run Code Online (Sandbox Code Playgroud)

而我期待

start
2 3 4
done
Run Code Online (Sandbox Code Playgroud)

laz*_*zy1 7

map是懒惰的,do不会强迫它.如果要强制评估惰性序列,请使用doalldorun.

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