Цикл с условием продолжения Clojure

То, что Javascript - это не то, чему можно научиться за час!

11
задан Hamza Yerlikaya 28 June 2009 в 00:29
поделиться

2 ответа

Я не знаю Clojure, но похоже, что, как и Scheme, он поддерживает "let loops":

(loop [char (readChar)]
   (if (= char delimiter)
       '()
       (do (some-processing)
           (recur (readChar)))))

Надеюсь, этого достаточно, чтобы вы начали. Я сослался на http://clojure.org/special_forms#toc9 , чтобы ответить на этот вопрос.

ПРИМЕЧАНИЕ: Я знаю, что Clojure препятствует возникновению побочных эффектов, поэтому, вероятно, вы хотите вернуть что-то полезное вместо ' ().

10
ответ дан 3 December 2019 в 05:36
поделиться

Я придумал это в духе 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))))))))))

Полная вставка .

2
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: