Без заголовка
14-05-2017 20:17
к комментариям - к полной версии
- понравилось!
решил было, что на сегодня хватит, но там не менее я еще напишу здесь оду Haskell'ю
как-то заранее знал, что мы с ним поладим:333
ибо чем больше пиздец, тем сильнее мои интерес и упорство) *я так с кучей дорогих мне людей познакомился, но не суть:D и прастити))*
какой же он многоликий! большинство стандартных функций можно легко написать самому, да еще и хуевой кучей способов! а еще в нем нет циклов! но есть рекурсия) та самая, которая от **Бога)) очень много рекурсии)
и он совсем не вербозный, зато невъебенно выразительный.
это потому что объяснять компьютеру, "что" ему сделать, гораздо легче, чем "как")
есть даже шутка, что любая спецификация с требованиями - это почти готовая программа на языке Lisp (еще один функциональный братишка Хаскеля), где нужно только расставить знаки препинания%)
я с этими ребятами даже курс линейной алгебры немного в голове освежил и теперь снова отличаю левую ассоциативность от правой (а также Бебеля - от Бабеля, кобеля - от кабеля:D)
ну и всякие хитровыебанные задачки со звездочками, которыми нас пичкали в школоуниверах, решаются в два пинка.
почему я и такие языки программирования раньше были слишком разными?
допустим:
- How many elements does it take for the sum of the square roots of all natural numbers to exceed 1,000?
- нет проблем, кошак, вот тебе ответ:
sqrtSums = length (takeWhile (<1000) (scanl1 (+) (map sqrt [1..]))) + 1
131
заебашиваем бесконечную последовательность чисел от одного до бесконечности (laziness, присущая всем функциональщикам, это позволяет), применяем map'ом к каждому элементу функцию извлечения квадратного корня sqrt, что дает нам новую последовательность, квадратных корней (разумеется, тоже бесконечную).
поверх этого нахлобучиваем левоассоциативную функцию scanl, сохраняющую последовательность аккумуляторов, в модификации scanl1. это когда начальным значением аккумулятора является первый элемент списка. рекурсивно вызываем сложение, но только пока вся эта байда меньше 1000 (вот почему бесконечная последовательность не страшна, ничего не переполнится и всё завершится).
считаем длину получившейся хероты и не забываем увеличить ее на единичку (надо же, чтобы сумма была больше 1000)
финита ля комедия!
я хуею, когда представлю, сколько кода бы тут было в любом языке императивной парадигмы.
дрочить поэлементно коллекцию (от 0 до length-1), изменять i-ый элемент, куча if'ов и вложенных циклов
нет, спасибо!
лучше пусть я буду с монадами, функторами и аппликативами (и с бородой:D, потому что нельзя о таких вещах говорить, не имея бороды:D)
___
** аллюзия на одно там высказывание: "цикл - от человека, рекурсия - от Бога"
вверх^
к полной версии
понравилось!
в evernote