如何在10行上打印n个,比如说10个数字的列表?我刚刚学习了循环和重复,但似乎无法将循环形式的副作用(println i)
与(recur (+ i 1))
结合起来。
只是要非常清楚:我想要像这样输出:
1
2
3
4
5
6
7
8
9
10
当n为10时。
答案 0 :(得分:15)
您可以使用doseq,这意味着在迭代涉及副作用时使用
(doseq [i (range 10)]
(println i))
你可以使用map作为指向但是会产生一个充满nils的序列,这既不是惯用的又浪费资源,而且doseq也不是懒惰所以不需要用doall强制它。
答案 1 :(得分:10)
我建议 dotimes 这种简单的循环:
(dotimes [i 10]
(println (inc i)))
请注意, dotimes 是非惰性的,因此对于像println这样会导致副作用的东西很有用。
答案 2 :(得分:3)
使用loop / recur:
(loop [i 1]
(when (<= i 10)
(println i)
(recur (inc i))))
然而,对于map函数println而言,它比1..10中的数字更具惯用性(读取:更多“Clojuristic”)。但是因为map返回了一个懒惰序列,所以你必须force its evaluation with doall:
(doall (map println (range 1 (inc 10))))
答案 3 :(得分:0)
为了全面,你也可以用地图做到:
(doseq (map #(println %) (range 10))
答案 4 :(得分:0)
如果您只想在屏幕上打印输出,您可能只需在输入条件之前输入(println i)
:
(loop [i 0]
(println i)
(if (< i 10)
(recur (inc i))
(println "done!")))
输出将是每行一个数字。