Как преобразовать ленивую последовательность в неленивый в Clojure

Диаграммы Google очень хороши, но это не направляющие только решение. Вы простое использование язык программирования по Вашему выбору для динамичного создания URL, которые содержат данные и Google, возвращаете Вас назад хорошее изображение с Вашей диаграммой.

http://code.google.com/apis/chart/

91
задан David J. 3 January 2013 в 17:41
поделиться

3 ответа

doall is all you need. Just because the seq has type LazySeq doesn't mean it has pending evaluation. Lazy seqs cache their results, so all you need to do is walk the lazy seq once (as doall does) in order to force it all, and thus render it non-lazy. seq does not force the entire collection to be evaluated.

151
ответ дан 24 November 2019 в 06:41
поделиться
(.getClass (into '() (take 3 (repeatedly rand))))
5
ответ дан 24 November 2019 в 06:41
поделиться

Это в некоторой степени вопрос таксономии. Ленивая последовательность - это всего лишь один тип последовательности , такой как список, вектор или карта. Итак, ответ, конечно, «это зависит от того, какой тип неленивой последовательности вы хотите получить:
Выберите из:

  • экс-ленивую (полностью оцененную) ленивую последовательность (doall ...)
  • список для последовательного доступа (применить список (my-lazy-seq)) ИЛИ (into () ...)
  • вектор для последующего произвольного доступа (vec (my-lazy-seq))
  • карта или набор, если у вас есть какое-то специальное назначение.

Вы можете выбрать любой тип последовательности, наиболее соответствующий вашим потребностям.

66
ответ дан 24 November 2019 в 06:41
поделиться
Другие вопросы по тегам:

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