Clojure循环读取一个额外的

时间:2009-06-28 20:36:48

标签: loops clojure stream lisp

当长度为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 个答案:

答案 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中是最终的吗?