3

長さが 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)))))
4

2 に答える 2

3

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)))))
于 2009-06-28T21:02:42.440 に答える
0

私はclojureを知りませんが、「結果」形式でストリームを再度読んでいるように見えます.これはCLの最終的なものですか?

于 2009-06-28T20:41:34.497 に答える