Comments 34
>В куче Хаскеля всё аккуратно завёрнуто по коробочкам. Куча Хаскеля — это куча подарков (thunks). Когда вы хотите узнать, что же внутри подарка, вы открываете (вычисляете) его.
>Подарки в куче довольно своенравны. Некоторые взрываются, когда вы их открываете, другие населены духами, которые открывают другие подарки, когда их тревожат.
Ну и где мне теперь скрыться от этого полного, беспросветного п*здеца?
>Подарки в куче довольно своенравны. Некоторые взрываются, когда вы их открываете, другие населены духами, которые открывают другие подарки, когда их тревожат.
Ну и где мне теперь скрыться от этого полного, беспросветного п*здеца?
+17
Это наконец та самая статья для IT-ресурса суть которой никому вне IT-сферы понять не дано?)
+7
Без бутылки вики не разобраться… ru.wikipedia.org/wiki/Haskell
0
Невообразимо круто.
+2
«Если написать программу, которой сможет пользоваться любой идиот, то только идиоты этой программой и захотят пользоваться»…
К чему такой детский сад? Между высшей алгеброй и объяснением на пальцах срединного пути нет?
К чему такой детский сад? Между высшей алгеброй и объяснением на пальцах срединного пути нет?
0
Я просто приведу цитату:
«Если вы что-то не можете объяснить 6-летнему ребёнку, вы сами этого не понимаете.»
— Бернард Шоу
«Если вы что-то не можете объяснить 6-летнему ребёнку, вы сами этого не понимаете.»
— Бернард Шоу
0
Только то что очевидно шестилетнему ребенку, далеко не всегда легко понять взрослому.
Хороший пример эта задачка:
forum.bobr.by/viewtopic.php?f=1&t=568&st=0&sk=t&sd=a
Хороший пример эта задачка:
forum.bobr.by/viewtopic.php?f=1&t=568&st=0&sk=t&sd=a
0
Что то чушь какая то )
-2
даю топикстартеру ещё одну идею, как можно легко и просто рассказывать про хаскель так, чтобы было понятно даже самым глупым и неграмотным. вот, например, смысл «монады» мало кто понимает, даже если и пользовался. хотя на самом деле это довольно просто, ведь монада — это всего-навсего моноид в категории эндофункторов.
0
А в чём собственно заключается идея?
0
Все просто. В языке есть «чистые» функции и «монады». Первые выполняют вычисление на основе аргументов без побочных эффектов. То есть, если f(1,2,3) = 15, то при данных аргументах она ВСЕГДА = 15. В ООП языках это не гарантируется, потому что есть глобальные переменные, члены класса и тд, которые могут меняться. Вот, а монады как раз могут возвращать разные значения в зависимости от аргументов. Обычно, в связи с вызовами функций ввода-вывода. Чистые функции обладают одним интересным свойством, а именно, возможностью автоматического распараллеливания программы, потому что аргументы функций могут вычисляться параллельно без побочных эффектов. В эру многоядерных процессоров это особенно актуально.
У функциональных языков есть еще много интересного (взять хотя бы ленивые вычисления). Но, судя по комментариям к этой заметке, что большинству «тру айтишников» на хабре этого не дано понять.
У функциональных языков есть еще много интересного (взять хотя бы ленивые вычисления). Но, судя по комментариям к этой заметке, что большинству «тру айтишников» на хабре этого не дано понять.
+2
так это чо, получается, что монада — это просто функция, которую надо всё время вычислять, и она заманала генерить непредсказуемое на выходе?
0
Монада — традиционная «функция» с побочными эффектами, как в c/c++/pascal. Два раза подаешь одинаковые аргументы и не факт, что получишь один результат.
0
Да ничего подобного. Монада — это класс с интерфейсом из трёх чистых функций, при помощи которых можно абсрагировать концепцию состояния и побочных эффектов.
+2
Думаете, такое объяснение поможет обратить сторонников ООП в новую веру? :) Главное — что оно делает, а не как оно реализовано.
0
Зачем вообще кого-то кудато обращать? И вот как раз то, что оно делает — это и есть класс с тремя методами (интерфейс), а то, как оно это делает — это и есть реализация.
Но просто монада — это абсолютно точно ни с какой точки зрения не является функцией. Зачем вводить в заблуждение начинающих Haskell-истов? Язык-то и без этого не тривиальный.
Но просто монада — это абсолютно точно ни с какой точки зрения не является функцией. Зачем вводить в заблуждение начинающих Haskell-истов? Язык-то и без этого не тривиальный.
0
Вроде бы тема была раскрыта habrahabr.ru/blogs/Haskell/118167/
0
Если уж на то пошло, и в ООП языках уже есть и чистые функции, и замыкания и lazy argument evaluation: например, в языке D, и в других тоже вроде есть. Так что больше не надо извращаться с заумными академическими языками, чтобы ими пользоваться.
0
Картинки клёвые, но шо тут написано…
0
Вот что случается, когда художники начинают учить программированию.
+1
Вы так говорите, как будто это что-то плохое :)
Просто сама тема довольно нетривиальная, поэтому иллюстрируй ее или нет, сильно понятнее не станет. Тем не менее, хорошо иллюстрированная статья помогает связывать понятия еще и на ассоциативном поле изображений.
А по поводу художника: learnyouahaskell.com выглядит еще более забавно, хотя его рисовал таки сам автор :)
Просто сама тема довольно нетривиальная, поэтому иллюстрируй ее или нет, сильно понятнее не станет. Тем не менее, хорошо иллюстрированная статья помогает связывать понятия еще и на ассоциативном поле изображений.
А по поводу художника: learnyouahaskell.com выглядит еще более забавно, хотя его рисовал таки сам автор :)
+1
Эта серия статей явно не для знакомства с языком. И не для мотивации изучения хаскеля.
Скорее для тех, кому интересно разобраться в тонкостях работы компилятора.
Рисунки хоть и примитивные, но со смыслом:
1 — простое значение
Just y — тип данных Maybe a
тупл — (a,b)
_|_ — значение, вычисление которого приведёт к ошибке
seq x y — функция форсированного вычисления, нужна чтобы выключить «ленивость»
Скорее для тех, кому интересно разобраться в тонкостях работы компилятора.
Рисунки хоть и примитивные, но со смыслом:
1 — простое значение
Just y — тип данных Maybe a
тупл — (a,b)
_|_ — значение, вычисление которого приведёт к ошибке
seq x y — функция форсированного вычисления, нужна чтобы выключить «ленивость»
+3
Именно! Чтобы развить интуицию о том, что за чем, сколько памяти и как долго.
У меня ещё ленивые вычисления ассоциируются с фигурно вязаным свитером: тянешь за ниточку, свитер распускается, а ниточка запутанно бегает по петлям.
У меня ещё ленивые вычисления ассоциируются с фигурно вязаным свитером: тянешь за ниточку, свитер распускается, а ниточка запутанно бегает по петлям.
0
А по поводу _|_ uncyclopedia говорит:
Calculations which are undefined are denoted by the _|_ symbol, pronounced Bottom, which the documentation explains as the compiler giving you the finger.
Calculations which are undefined are denoted by the _|_ symbol, pronounced Bottom, which the documentation explains as the compiler giving you the finger.
0
Я так понимаю, ждать продолжения? Лично я с интересом почитаю!
0
Sign up to leave a comment.
Куча Хаскеля