最后一个懒惰的seq会评估clojure中的所有元素吗?

lha*_*hne 4 clojure lazy-evaluation

我们假设我们有一个昂贵的计算expensive.如果我们考虑map生成一个惰性seq,那么下面是否expensive为映射集合的所有元素或仅针对最后一个元素评估函数?

(last
  (map expensive '(1 2 3 4 5)))
Run Code Online (Sandbox Code Playgroud)

即,这是评估expensive所有值1..5还是仅评估(expensive 5)

Pau*_*Lam 7

整个系列将进行评估.一个简单的测试回答你的问题.

=> (defn exp [x]
     (println "ran")
     x)
=> (last
     (map exp '(1 2 3 4 5)))
ran
ran
ran
ran
ran
5
Run Code Online (Sandbox Code Playgroud)