Вы должны проверить на zero?
, прежде чем делать read
. Обратите внимание, что ваша версия будет вызывать read
один раз, даже если length
== 0 для начала.
(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)))))