如何在clojure的每一行打印一个数字列表?

时间:2011-06-29 12:34:44

标签: loops printing clojure println

如何在10行上打印n个,比如说10个数字的列表?我刚刚学习了循环和重复,但似乎无法将循环形式的副作用(println i)(recur (+ i 1))结合起来。 只是要非常清楚:我想要像这样输出:

1
2
3
4
5
6
7
8
9
10

当n为10时。

5 个答案:

答案 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!")))

输出将是每行一个数字。