То, что Javascript - это не то, чему можно научиться за час!
Я не знаю Clojure, но похоже, что, как и Scheme, он поддерживает "let loops":
(loop [char (readChar)]
(if (= char delimiter)
'()
(do (some-processing)
(recur (readChar)))))
Надеюсь, этого достаточно, чтобы вы начали. Я сослался на http://clojure.org/special_forms#toc9 , чтобы ответить на этот вопрос.
ПРИМЕЧАНИЕ: Я знаю, что Clojure препятствует возникновению побочных эффектов, поэтому, вероятно, вы хотите вернуть что-то полезное вместо ' ().
Я придумал это в духе line-seq
. Он полностью ленив и демонстрирует больше функциональности Clojure, чем цикл
.
(defn delim-seq
([#^java.io.Reader rdr #^Character delim]
(delim-seq rdr delim (StringBuilder.)))
([#^java.io.Reader rdr #^Character delim #^StringBuilder buf]
(lazy-seq
(let [ch (.read rdr)]
(when-not (= ch -1)
(if (= (char ch) delim)
(cons (str buf) (delim-seq rdr delim))
(delim-seq rdr delim (doto buf (.append (char ch))))))))))