n、たとえば10の数字のリストを10行に印刷するにはどうすればよいですか?ループと再発について学びましたが、副作用(println i)
を(recur (+ i 1))
ループ形式で組み合わせることができないようです。明確にするために、次のような出力が必要です。
1
2
3
4
5
6
7
8
9
10
nが10の場合。
これにはdoseqを使用できます。これは、反復に副作用が含まれる場合に使用することを目的としています。
(doseq [i (range 10)]
(println i))
先のとがったマップを使用することもできますが、それは慣用的ではなく、リソースを浪費するnilでいっぱいのシーケンスを生成します。また、doseqは怠惰ではないため、強制する必要はありません。
この種の単純なループにはdotimesをお勧めします。
(dotimes [i 10]
(println (inc i)))
dotimesは非遅延であるため、副作用を引き起こす println などに適していることに注意してください。
ループ/再帰あり:
(loop [i 1]
(when (<= i 10)
(println i)
(recur (inc i))))
ただし、関数 println を 1..10 の数値にマップするのは、より慣用的 (読み方: より "Clojuristic")です。ただし、 map は遅延シーケンスを返すため、 doall でその評価を強制する必要があります。
(doall (map println (range 1 (inc 10))))
出力を画面に表示するだけの場合は(println i)
、条件を入力する前に単に a を追加することもできます。
(loop [i 0]
(println i)
(if (< i 10)
(recur (inc i))
(println "done!")))
出力は 1 行に 1 つの数値になります。
そして、包括的にするために、マップでも行うことができます:
(doseq (map #(println %) (range 10))