Цикл Clojure читает один дополнительный - PullRequest
3 голосов
/ 29 июня 2009

Когда длина равна 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)))))

Ответы [ 2 ]

3 голосов
/ 29 июня 2009

Вы должны проверить на 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)))))
0 голосов
/ 29 июня 2009

Я не знаю clojure, но мне кажется, что вы снова читаете поток в форме «результата», это как финал в CL?

...