13

n、たとえば10の数字のリストを10行に印刷するにはどうすればよいですか?ループと再発について学びましたが、副作用(println i)(recur (+ i 1))ループ形式で組み合わせることができないようです。明確にするために、次のような出力が必要です。

1
2
3
4
5
6
7
8
9
10

nが10の場合。

4

5 に答える 5

16

これにはdoseqを使用できます。これは、反復に副作用が含まれる場合に使用することを目的としています。

(doseq [i (range 10)]
   (println i))

先のとがったマップを使用することもできますが、それは慣用的ではなく、リソースを浪費するnilでいっぱいのシーケンスを生成します。また、doseqは怠惰ではないため、強制する必要はありません。

于 2011-06-29T17:05:58.257 に答える
11

この種の単純なループにはdotimesをお勧めします。

(dotimes [i 10]
  (println (inc i)))

dotimesは非遅延であるため、副作用を引き起こす println などに適していることに注意してください。

于 2011-06-29T17:35:46.420 に答える
3

ループ/再帰あり:

(loop [i 1]
  (when (<= i 10)
    (println i)
    (recur (inc i))))

ただし、関数 println を 1..10 の数値にマップするのは、より慣用的 (読み方: より "Clojuristic")です。ただし、 map は遅延シーケンスを返すため、 doall でその評価を強制する必要があります。

(doall (map println (range 1 (inc 10))))
于 2011-06-29T12:41:24.637 に答える
0

出力を画面に表示するだけの場合は(println i)、条件を入力する前に単に a を追加することもできます。

(loop [i 0]
  (println i)
  (if (< i 10)
    (recur (inc i))
    (println "done!")))

出力は 1 行に 1 つの数値になります。

于 2015-07-17T00:15:30.387 に答える
0

そして、包括的にするために、マップでも行うことができます:

(doseq (map #(println %) (range 10))
于 2011-06-29T17:34:11.567 に答える