如何在clojure/lisp中获取'for'只返回值而不创建列表?



在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))

确保关闭外部列表的括号。

最新更新