Как стать автором
Обновить

Комментарии 9

НЛО прилетело и опубликовало эту надпись здесь
Лучше б на какой ML сослались (хоть на F#), чем на Хаскель. А то открываю статью с мыслью «а ну-ка посмотрим, как они там замутили ленивые списки» — ан нет, списки-то обычные, с такими я и на крестиках могу работать без труда…
(ленивость в Хаскеле — основополагающая вещь, именно она позволила так упростить язык, что if можно сделать функцией… Да и бесконечные списки вместо циклов — подарок от ленивого выполнения).
Если вам в Kotlin нужна ленивость и бесконечность — берите Sequence.
Лучше б на какой ML сослались (хоть на F#), чем на Хаскель. А то открываю статью с мыслью «а ну-ка посмотрим, как они там замутили ленивые списки» — ан нет, списки-то обычные,


Плюс один. Впечатление от статьи, что ее задача была именно «да на что нам ваш хаскель, хайповый модный котлин могет не хуже».
Ан нет, не могет.
Ни в коем случае. На мой взгляд хаскель гораздо глубок и интересен.
Я попытался взять то, что мне больше всего понравилось в хаскеле и применить к Котлину. Подумал, что может кого-нибудь заинтересует взглянуть на хаскель, но похоже что я как-то неудачно это преподнёс.
Согласен, ленивые списки просто волшебные.

Как мне кажется, статья не отражает "Haskell подход". В Haskell — простая структура данных (cons-list) + рекурсия позволяют эффективно решать перечисленные задачи. Предлагаемые в статье алгоритмы выглядят неэффективно.


Например, size использует метод tail типа List, что, в случае array-list'а будет копировать почти весь лист (O(N) по времени и по памяти), а затем не использует хвостовую рекурсию (O(N) по памяти), чтобы прибавить 1. Тем самым общая вычислительная сложность оказывается O(N^2), что отличается от обычной сложности O(N) по времени и O(1) по памяти.


В примере с хвостовой рекурсией автор также использует when(xs.size) внутри функции. В случае, если List — односвязный список, опять окажется, что каждый вызов O(N). В итоге хвостовая рекурсия не спасает, получаем O(N^2). (Можно было бы использовать when(xs.isEmpty) с O(1).)

Да, ни о какой эффективности в этом коде не стоит говорить. Хотелось показать то, что мне кажется идиоматическим подходом.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории