こんにちは私はclojureを学んでいて、タイプすると何が起こっているのかを理解したいです
(map println '(1 2 3 4))
私は次のようなものを期待していました
1
2
3
4
しかし、私は得ました
(1
2
nil 3
nil 4
nil nil)
これは私が作った単なる例です。何が起こっているのかを理解したいだけです。多分怠惰と関係がありますか?
実行の結果(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を返すことを確認してください