루프 방식에 가깝다 뭔가를 수행하여 Clojure의에서 루프 Clojure의 그러나 루프/RECUR에서 잘 작동하는 동안, 당신은 쓸 수에 대한 낮은 수준의 작업과 높은 순서 기능이 일반적으로 선호되는 것으로 간주됩니다. 일반적으로 이러한 종류의 문제점은 토큰의 시퀀스를 생성하여 해결 될 것
합니다 (예 : 문자) 및 또는 Clojure에서의 시퀀스 기능 (doseq, dorun, 테이크 동안, 등)
의 더 적용 다음 예제는 시스템과 같은 유닉스에서/etc/passwd에서 첫 번째 사용자 이름을 읽습니다.
(require '[clojure.java [io :as io]])
(defn char-seq
"create a lazy sequence of characters from an input stream"
[i-stream]
(map char
(take-while
(partial not= -1)
(repeatedly #(.read i-stream)))))
;; process the sequence one token at a time
;; with-open will automatically close the stream for us
(with-open [is (io/input-stream "/etc/passwd")]
(doseq [c (take-while (partial not= \:) (char-seq is))]
;; your processing is done here
(prn c)))
부작용에 관하여. 어쩌면 누산기를 루프에 추가하여 결과가 기능적으로 어떻게 구축되는지 보여줄 수 있습니까? –