我正在学习Clojure,而且我没有得到这段代码背后的逻辑:
(def ^:dynamic *max-value* 250)
(defn valid-value? [v]
(<= v *max-value*))
(binding [*max-value* 500]
(prn (map valid-value? [299]))
(map valid-value? [299]))
它会打印(true)
,但会返回(false)
。
我完成打字时意识到了答案。我想无论如何我都会发布这个问题,
也许它会对其他人有用。
答案 0 :(得分:2)
map
生成一个惰性序列,在这种情况下,在repl打印该值之前,不会强制进行评估。
此时,*max-value*
不再绑定到500。
如果您使用mapv
,则会返回[true]
!