16

こんにちは私はclojureを学んでいて、タイプすると何が起こっているのかを理解したいです

(map println '(1 2 3 4))

私は次のようなものを期待していました

1
2
3
4

しかし、私は得ました

(1
2
nil 3
nil 4
nil nil)

これは私が作った単なる例です。何が起こっているのかを理解したいだけです。多分怠惰と関係がありますか?

4

1 に答える 1

31

実行の結果(map println ...)は、nilであるprintlnの実行結果のコレクションです。したがって、結果は(nil nil nil nil)REPLが出力するコレクションです。これを印刷している間、println呼び出しは、REPLへの出力も出力するので、2つが混在していることがわかります。

印刷せずにこれを定義した場合:

user=> (def result (map println [1 2 3 4]))
#'user/result

結果が怠惰であるため、最初は何も起こりません。印刷せずに実現すればdorun

user=> (dorun result)
1
2
3
4
nil

各printlnの副作用が確認され、戻り値dorunはnilになります。次に、結果を評価して結果の内容を確認できます。

user=> result
(nil nil nil nil)

nilそしてそれがたくさんのsを返すことを確認してください

于 2012-12-27T23:16:33.777 に答える