長さが 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)))))
zero?を実行する前にテストする必要がありreadます。最初に == 0 のread場合でも、バージョンは 1 回呼び出すことに注意してください。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)))))
私はclojureを知りませんが、「結果」形式でストリームを再度読んでいるように見えます.これはCLの最終的なものですか?