如何循环打印?

时间:2019-08-11 09:30:58

标签: clojure

我正在学习Clojure,我不确定为什么这样做

(defn repeat-hello []
  (map println (repeat 10 "Hello"))
  (println "The end"))

没有打印出Hello十次和The end

2 个答案:

答案 0 :(得分:1)

强烈建议阅读有关lazy sequence及其工作方式的更多信息

有很多方法可以做到,其中一种是使用 dotimes ,它根据您的决定运行“ n”次,例如:

public class Main { public static void main(String[] args) throws Exception { String url = "http://2ip.ru/"; URL obj = new URL(url); HttpURLConnection connection = (HttpURLConnection) obj.openConnection(); connection.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); } }

我们在这里基本上说:

  • dotimes(函数的名称)
  • [n 3](n从0到3)
  • (println“ Hello”)(您要执行什么操作)

答案 1 :(得分:0)

@akond已经解释了惰性序列“ gotcha”的奥秘,但只是要注意,如果您要强制实现惰性序列,那么您可能首先不希望使用惰性序列。在这种情况下,dotimesdoseq之类的Clojure函数可能更适合您。

(defn repeat-hello []
  (dotimes [_ 10]
    (println "Hello"))
  (println "The end"))

(defn repeat-hello []
  (doseq [s (repeat 10 "Hello")]
    (println s))
  (println "The end"))