当长度为4时,循环执行5次。从流中读取5个字符。
(loop [i (.read stream) result "" counter length]
(let [c (char i)]
(println "=>" c)
(if (zero? counter)
result
(recur (.read stream) (str result c) (dec counter)))))
答案 0 :(得分:3)
在执行zero?
之前,您应该测试read
。请注意,即使read
== 0开始,您的版本也会调用length
一次。
(loop [result "" counter length]
(if (zero? counter)
result
(let [c (char (.read stream))]
(println "=>" c )
(recur (str result c) (dec counter)))))
另一种避免明确loop
:
(apply str
(take length
(repeatedly #(let [c (char (.read stream))]
(println "=>" c) c)))))
答案 1 :(得分:0)
我不知道clojure,但它看起来像你正在以“结果”的形式再次阅读流,这在CL中是最终的吗?