особенную особенность ленивости в хаскеле. детали не копал особо, но лишь понимаю сам принцип, в традиционном изложении: мол до тех пор пока какой-то expression не нужен, он не будет вычислен. т.е. своего рода pull model.
из совета постижения стг-интепретатора и ленивости, что конкретно стоит изучить ? какой конкретно аспект этой ленивости ? т.к. сейчас это кажется каким-то вроде как понятным, но раз часто так упоминают, то вероятно есть что-то мудреное там.
да там нет ничего "мудреного" как такового, да, примерно как описали так и есть, надо просто привыкнуть думать о вычислениях что они именно так происходят, пограть с каким-нибудь вычислителям вроде этого https://www.well-typed.com/blog/2017/09/visualize-cbn/ или stgi https://hackage.haskell.org/package/stgi https://skillsmatter.com/skillscasts/8800-functional-and-low-level-watching-the-stg-execute
С ленивостью все и просто, и сложно одновременно. По началу можно ограничиться тем, что ленивость позволяет преобразовывать структуры без немедленного обхода их целиком. Напиши, например, функцию для создания графа: она принимает вершину и возвращает список смежных вершин. Одна такая функция будет полным описанием графа. Напиши теперь другую функцию, которая, используя первую, преобразует граф в список смежности. И вот пока ты работаешь с первыми элементами этого списка, он весь не вычисляется. Может, по задаче вообще не надо будет.
Обсуждают сегодня