在Clojure中,运行以下代码:
(for [i (range 5)] i)
创建列表:
(0 1 2 3 4)
但我希望for子句只输出每个数字,而不创建列表。为了实现这一点,我必须改变什么?
clojure.core有doseq
用于此目的:
user=> (doseq [i (range 5)] (println i))
0
1
2
3
4
nil
末尾的nil是在doseq调用处理完所有值后打印返回值的repl
因为我试图将列表的内容放在一个单独的列表中,所以我所做的就是用一个into子句来包装外部列表,如下所示:
(into
'("original" "list" "contents" ...)
(for [i (range 5)] i))
确保关闭外部列表的括号。