Map 为什么clojure';我们的地图和println是一样的吗?

Map 为什么clojure';我们的地图和println是一样的吗?,map,clojure,println,Map,Clojure,Println,你好,我正在学习clojure,我想知道当我打字时发生了什么 (map println '(1 2 3 4)) 我以为会是这样 1 2 3 4 但是我有 (1 2 nil 3 nil 4 nil nil) 这只是我编的一个例子。我只是想知道发生了什么。可能与懒惰有关?运行(map println…的结果是运行println的结果的集合,该结果为零。因此,结果是REPL打印的(nil nil nil)的集合。 打印时,println调用也会将输出打印到REPL,这样就可以看到两者混合在一起

你好,我正在学习clojure,我想知道当我打字时发生了什么

(map println '(1 2 3 4))
我以为会是这样

1
2
3
4
但是我有

(1
2
nil 3
nil 4
nil nil)

这只是我编的一个例子。我只是想知道发生了什么。可能与懒惰有关?

运行
(map println…
的结果是运行println的结果的集合,该结果为零。因此,结果是REPL打印的
(nil nil nil)
的集合。 打印时,println调用也会将输出打印到REPL,这样就可以看到两者混合在一起

如果未打印就定义了它:

user=> (def result (map println [1 2 3 4]))
#'user/result
最初什么都不会发生,因为结果是懒惰的。如果我们不使用
dorun

user=> (dorun result)
1
2
3
4
nil
我们看到了每个println的副作用,然后是
dorun
的返回值,该值为零。然后,我们可以通过评估结果来查看其内容

user=> result
(nil nil nil nil)

并查看它返回一组
nil
s

一般建议:不要在map操作中使用副作用函数