我正在学习Clojure,我不确定为什么这样做
(defn repeat-hello []
(map println (repeat 10 "Hello"))
(println "The end"))
没有打印出Hello
十次和The end
答案 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());
}
}
我们在这里基本上说:
答案 1 :(得分:0)
@akond已经解释了惰性序列“ gotcha”的奥秘,但只是要注意,如果您要强制实现惰性序列,那么您可能首先不希望使用惰性序列。在这种情况下,dotimes
和doseq
之类的Clojure函数可能更适合您。
(defn repeat-hello []
(dotimes [_ 10]
(println "Hello"))
(println "The end"))
(defn repeat-hello []
(doseq [s (repeat 10 "Hello")]
(println s))
(println "The end"))