Ленивый посмотрит и скажет последовательности


Я решения онлайн проблемы в Clojure. Один из них предполагает посмотрит и скажет последовательности.

(defn look-and-say [s]
   (let [las (loop [item (first s) coll s counts [] count 0]
      (cond
         (nil? (seq coll)) (conj counts count item)
         (= item (first coll)) (recur item (rest coll) counts (inc count))
         :else  (recur (first coll)  coll (conj counts count item) 0)))]
      (lazy-seq (cons las (look-and-say las)))))

Я хотел бы знать, что я сделал правильно, а что я мог сделать лучше. Любая обратная связь приветствуется.



353
4
задан 2 сентября 2011 в 09:09 Источник Поделиться
Комментарии
1 ответ

одна из больших вещей о Clojure является возможность отделить код в проблемы, а затем составляет из них композицию. Это действительно помогает пятна многоразовые деталей и позволяет построить код в меньших независимо проверяемых деталей.

части, которые я вижу:


  • дана последовательность чисел производить следующий

    • раздел-Все дальше на группы последовательных чисел

    • для каждой группы идущих подряд цифр сказать сколько стоят (карты говорят, список-о-групп)

    • выровнять результат в одном списке. но на самом деле вы должны использовать mapcat на предыдущем шаге и пропустить этот шаг.


  • применить результат к той же функции ( итерировать функцию)

  • брать ровно столько, сколько вам нужно

3
ответ дан 2 сентября 2011 в 10:09 Источник Поделиться