> -- Цитата:
> Тут тебе все: и ленивость (concat), и ФВП (mapv), и лямбды с замыканиями, и бесконечные ленивые последовательности (range). Вопросов нет, это действительно нормальные, часто используемые Clojure примитивы. Я даже не могу этот код назвать не-идиоматичным. Но. Просто представьте, сколько механизмов там крутится под капотом, чтобы вся эта красивая запись отработала...Сделать loop, наконец. Иногда цикл это всего лишь цикл. И никак по-другому ты его не запишешь. И это нормально. Компьютер скажет спасибо.
Сейчас наоборот, наблюдается некая новая волна "функциональщины". Для JavaScript Фейсбук толкает свой новый ReasonML (диалект ML), Microsoft прикармливает исследовательский проектBosque(язык также с элементами от ML). Последний вообще заявляет о "структурном программировании 2.0" под видом"regularized programming", пытаясь ликвидировать "accidental complexity" (по Бруксу), с которыми (ненужными сложностями) якобы недостаточно справляется "классическое" структурное программирование. Подробнее:
https://www.microsoft.com/en-us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf

В Bosque принципиально не применяются операторы циклов, что способствует (видимо, пока, в основном, теоретически) лучшим оптимизациям (в т.ч. и внедрение SIMD-векторизации) и верификации, ну и якобы лучшему понимаю (как минимум, без операторов цикла более реально извлечь из кода вычислительную модель, не применяя дополнительные вспомогательные (неисполнимые) декларации для инварианта цикла и пр.).
Аналогичный подход, например, наблюдается в Esterel/Lustre, где, к слову, гораздо круче впечатление от оптимизаций и, в целом, от ликвидации избыточной "функциональной" сложности (чему способствует, прежде всего, совсем иная модель "ленивости" вычислений).