Куда прячется ленивость и как ее оттуда достать?

Oct 31, 2014 20:16

Мы привыкли, что правая свертка (foldr) хорошо заточена для работы с бесконечными списками:

> let mapPlusPi = foldr (\x xs -> (x+pi):xs) []
> head $ mapPlusPi [1..]
4.141592653589793
К сожалению, иногда возникают неприятности. Вот функция, которая берет список и выкидывает из него элементы стоящие на нечетных местах:

> let evenOnly = snd . foldr ( Read more... )

fprog, haskell, сборник задач и упражнений по Хаскелю, fp

Leave a comment

gds October 31 2014, 21:28:38 UTC
и почему людям по приколу каждый раз вспоминать, где строго, а где лениво в этом вашем х-е? Чем более явно из кода видна его производительность, тем лучше.

Reply

nivanych October 31 2014, 23:01:22 UTC
Иными словами, у повсеместной ленивости есть только один существенный недостаток -
большая непривычность (но не сложность!) рассуждения за costs semantics.
Что довольно сильно, не буду спорить.

Reply

gds October 31 2014, 23:23:45 UTC
и сложность тоже есть -- надо помнить, где что лениво, а где строго. В данной задаче пришлось вспомнить/узнать, что есть волшебное "~" перед паттерном, которое делает лениво. Чем меньше помнить (иметь заученных наизусть знаний), тем проще.

" = "

Reply

alexandermarkov October 31 2014, 23:07:33 UTC
Язык надо знать, дубина!

Reply

gds October 31 2014, 23:24:15 UTC
пасяп)))))))

Reply

nivanych November 1 2014, 08:45:16 UTC
Мы говорим о ленивости и практическом опыте работы, и не обязательно применимо к конкретному языку.
И какой же это язык надо знать, тов. недубина?

Reply

alexandermarkov November 1 2014, 09:09:58 UTC
Тот, на котором погроммируешь, конечно.

Reply


Leave a comment

Up