代码之家  ›  专栏  ›  技术社区  ›  yayitswei

do内部的映射的意外输出

  •  4
  • yayitswei  · 技术社区  · 15 年前

    为什么这不能产生我期望的结果?

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

    It输出

    start
    done
    

    而我希望

    start
    2 3 4
    done
    
    1 回复  |  直到 15 年前
        1
  •  7
  •   Miki Tebeka    15 年前

    map 他很懒,而且 do 不强迫它。如果要强制对延迟序列求值,请使用 doall dorun .

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