Mik*_*ike 6 functional-programming clojure
为什么这个Clojure代码:
user=> (map (constantly (println "Loop it.")) (range 0 3))
Run Code Online (Sandbox Code Playgroud)
产生此输出:
Loop it.
(nil nil nil)
Run Code Online (Sandbox Code Playgroud)
我希望它能三次打印"循环它"三次作为评估功能的副作用.
constantly不会多次评估其参数.它是一个函数,而不是一个宏,所以参数在constantly运行之前只被评估一次.所有constantly这一切都需要它的(计算)参数并返回一个函数,每次调用它时都会返回给定值(不重新评估任何东西,因为正如我所说,参数在constantly偶数运行之前已经被评估).
如果您只想调用(println "Loop it")范围中的每个元素,则应将其作为映射函数传递而不是constantly.请注意,您实际上必须将其作为函数传递,而不是计算表达式.