metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2015-07-10 02:01 pm

Хаскель и среднее арифметическое

Вот я хаскель использовал только пару раз и практически его не знаю, но в чем проблема с неэнергичным foldl - помню. Про то, что нужны банг-паттерны внутри тупла - краем уха слышал, но не вникал.
Стеб же на эту тему людей, которые слышали звон, да не знают, где он, меня очень сильно огорчает.
Ладно, айсед критикует - он хотя бы писал на этом и понимает, о чем речь идет. А так - это выглядит как "разработчики на клиппере критикуют SQL за то, что теория множеств".

[identity profile] aamonster.livejournal.com 2015-07-10 11:39 am (UTC)(link)
Учитывая "Avoid Success at All Costs" - огорчаться не следует.

Интереснее другое: пока в обсуждениях я видел всего то ли 1, то ли 2-х человек, для которых правильное решение - очевидно и иначе не написать: "Если хоть чуть-чуть писал на хаскелле, такое делается на автомате, даже на бумаже. Безусловный рефлекс -- аккумулятор (что-то делаем, а результат используется только в конце) -- ставим bang pattern." (c) [livejournal.com profile] vshabanov

[identity profile] dr-cha0s.livejournal.com 2015-07-10 01:57 pm (UTC)(link)
Можешь третьего записать. BTW, Johan Tibbel в своих code covnventions писал, что аккумутяторы должны быть строгими по умолчанию. https://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md
Edited 2015-07-10 14:02 (UTC)

[identity profile] aamonster.livejournal.com 2015-07-10 02:17 pm (UTC)(link)
Хорошо. Значит, правильно учить можно, но пока сложно (иначе процент был бы повыше).
Подождём.

Просто если есть стиль, позволяющий избегать таких ошибок, то учить без него - всё равно что учить людей на императивных языках считать факториал рекурсивно. А книжек, которые учат писать сразу в нужном стиле, я пока вроде не видел (UPD: надо снова взяться за Real World Haskell) - видел лишь статьи типа "а давайте посмотрим профайлером и решим, где добавить строгости".

UPD: Хотя, конечно, не так красиво получается. Академический язык, в котором всё лениво и (благодаря этому) единообразно, if и иже с ним - обычные функции, а не специальные формы - это прелесть. Но реальный мир вносит свои коррективы...
Edited 2015-07-10 14:24 (UTC)

[identity profile] dr-cha0s.livejournal.com 2015-07-10 04:18 pm (UTC)(link)
Ленивость - это особенность. Всё. Как и отсутствие GC в C++.
Я за 2 года написания кода в продакшн на прикол с ленивостью напоролся ли тогда когда передал санк с эксепшеном в другой тред, где не предусматривалась обработка эксепшена. Мой пример конечно не показатель.

[identity profile] lomeo.livejournal.com 2015-07-11 11:40 pm (UTC)(link)
К сожалению, не всё так просто. [livejournal.com profile] vshabanov, конечно, понимал о чём говорил, но фраза звучит так, как будто мы ставим bang над аккумулятором. Это не так — в этом случае у нас просто WHNF, а надо, чтобы энергично считались потроха. Например, в предлагаемой задаче надо ставить bang и над той частью аккумулятора, что собирает сумму, и над той, что считает кол-во элементов.

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

[identity profile] aamonster.livejournal.com 2015-07-12 06:42 am (UTC)(link)
Я таки нашёл. В Real World Haskell. Вот только это 20-я, что ли, глава - тогда как такие вещи должны относиться к основам (если, конечно, использовать язык как инструмент, а не как красивую математическую игрушку).

[identity profile] thesz.livejournal.com 2015-07-12 10:49 am (UTC)(link)
Хаскель приколен тем, что можно сделать очень много до того, как такие проблемы станут насущными.

Мой опыт (с 1998 года) говорит именно об этом.

[identity profile] lomeo.livejournal.com 2015-07-14 08:05 am (UTC)(link)
Интересно, спасибо! К сожалению, я RWH не читал внимательно (пролистал).