LINUX.ORG.RU

Первый выпуск электронного журнала «Практика функционального программирования»

 , ,


0

0

Вашему вниманию представляется первый выпуск журнала, посвящённого практике функционального и декларативного программирования, поставившего своей задачей помочь сориентироваться в инструментарии функционального программирования, в используемых в функциональной парадигме подходах к декомпозиции задач, способах упрощения программирования и снижения количества дефектов в разрабатываемых системах.

Первый номер журнала посвящён погружению в предмет функционального программирования и состоит более чем из сотни страниц.

Авторский коллектив журнала состоит из профессионалов промышленного программирования, участников международных олимпиад, конкурсов и конференций по функциональному программированию и преподавателей вузов России, стран ближнего и дальнего зарубежья.

Пожелания/замечания по оформлению и статьям можно размещать здесь

>>> Приятного чтения!

★★★

Проверено: Shaman007 ()
Последнее исправление: maxcom (всего исправлений: 1)
Ответ на: комментарий от bobrik

>> Я в ступоре. Что делать с цифирями 9 и 771?
> признайтесь, это троллинг


Это не троллинг. Кто мешал авторам написать, что затем нужно остаток от деления конкатенировать в строку результата, а результат целочислительного деления (если он не равен нулю) снова передать на обработку этому же алгоритму?

xintrea
()

Оо! Здорово! Действительно интересно почитатать! За оформление: 5 из 5 :) Спасибо! Ждем следующего номера :)

digiwhite
()
Ответ на: комментарий от xintrea

А Вы след. статью почитайте, там всегда можно отдохнуть душой, читая строки, наподобие этой: "Пётр негодует: закэшированное значение
totalPrice не было обновлено при изменении цен продуктов"

impfp
()

Здорово, как раз собирался "погрузиться" в functional programming :-)

sinister666 ★★
()
Ответ на: комментарий от xintrea

> Это не троллинг. Кто мешал авторам написать, что

Отсутствие тебя, как ревьювера статьи?

mv ★★★★★
()
Ответ на: комментарий от xintrea

>кто такие клозы?

Есть подозрение, что имелись ввиду кляузы (AKA clause).

DonkeyHot ★★★★★
()
Ответ на: комментарий от xintrea

>Это не троллинг. Кто мешал авторам написать, что затем нужно остаток от деления конкатенировать в строку результата, а результат целочислительного деления (если он не равен нулю) снова передать на обработку этому же алгоритму?

Читайте парой строчек выше

>Сам алгоритм прост: необходимо делить заданное число на основание (в задавае- мой задаче, стало быть, на 16), собирать остатки и продолжать этот процесс до тех пор, пока в результате деления не получится 0. Полученные остатки необходимо переве- сти в строковый вид посимвольно (учитывая шестнадцатеричные цифры), после чего конкатенировать все эти символы в результирующую строку в правильном направ- лении (первый остаток должен быть последним символом в результирующей строке, второй — предпоследним и т. д.).

Избирательное чтение?

zabivator
()

Большой сэнкс! Такого чтива действительно нам всем не хватает.

Deleted
()
Ответ на: комментарий от gns

+1

Не пользуюсь не из принципа, а по той причине, что от ЖЖшного (извиняюсь) дерьма часто закипает моск.

Deleted
()

Начал читать. Вроде интересно...
Автор молодец

mrhx
()
Ответ на: комментарий от xintrea

>Это не троллинг. Кто мешал авторам написать, что затем нужно остаток от деления конкатенировать в строку результата, а результат целочислительного деления (если он не равен нулю) снова передать на обработку этому же алгоритму?

Это в школе рассказывают. когда системы счисления проходят. Авторы, наверное, не думали, что их будут читать дети.

Laz ★★★★★
()
Ответ на: комментарий от zabivator

>> Читайте парой строчек выше
>> Сам алгоритм прост: необходимо делить заданное число на основание (в задавае- мой задаче, стало быть, на 16), собирать остатки и продолжать этот процесс до тех пор, пока в результате деления не получится 0. Полученные остатки необходимо переве- сти в строковый вид посимвольно (учитывая шестнадцатеричные цифры), после чего конкатенировать все эти символы в результирующую строку в правильном направ- лении (первый остаток должен быть последним символом в результирующей строке, второй — предпоследним и т. д.).

>> Избирательное чтение?


Это написано про классический структурный подход, тут вопросов нет, все подробно.

А я цитато даю про функциональный подход, в описании которого половина действий почему-то пропущена.

xintrea
()
Ответ на: комментарий от xintrea

> Остановился на 22-й странице, это читать невыносимо.

А я прочитал всё кроме шашек и монад - по-моему всё понятно, разве что для новичка в ФП местами могут быть неожиданные слова.

Bohtvaroh ★★★★
()

А не многовато ли "более сотни страниц" на одно погружение? :) Или грузят так, что потом не вылезешь? :)))

Вообще, ФП последнее время держится на двух легендах:

1. ФП хорошо параллелятся.
Адвокатура в сторону императивных языков: НУ И ЧТО? Для них тоже есть "параллельные библиотеки". Более того - большинство кода как раз НЕраспараллеливаемые участки, это вам не факториалы считать!

2. На ФП быстрее/лучше/кавайнее/короче писать код. Чушь собачья, более того - и сам код ЛЮБОГО ФЯ - это тихий ужас. Возьмите любой рецепт - он ИМПЕРАТИВЕН, ибо только так понятен нашему ОДНОПОТОКОВОМУ мозгу. А касательно "короче", так это чисто вопрос библиотек. Есть функция синуса - напишешь короче, нету - будет ТАКОЙ ЖЕ ДЛИННЫЙ КОД.

Ну и вообще, ввиду забытости, маргинальное ФП крутится где-то в академической среде, не представляя особой ценности для реального кодинга. Про их сравнение с ДотНЕТом вообще можно не говорить - мелкософт убежал далеко вперёд.

matumba ★★★★★
()
Ответ на: комментарий от xintrea

> Остановился на 22-й странице, это читать невыносимо.

:)))))))))) Это как читать про эзотерику - пока всё в теории, на которую натянули удобные примеры - вдохновляет, но чем дальше читаешь, тем больше понимаешь - столько мне не выкурить! :)

> Но надо, хотя бы, обладать умением последовательно излагать свои мысли.


га-га! :)) ФП для того и придумали, чтобы делать всё параллельно - оттуда и мышление пишущих. Как же страшно далеки они от народа....

matumba ★★★★★
()
Ответ на: комментарий от xintrea

> data BoolU = FALSE | TRUE | Unknown
> FALSE && x = FALSE

> TRUE && x =x

> Unknown && FALSE = FALSE

> Unknown && x = Unknown


>Что делает этот кусок кода на Хаскеле? Он что-то вычисляет? Он описывает, как что-то вычислять? Что является входными данными? Зачем нужна строка с элементом BoolU, если далее BoolU нигде не упоминается?


Вроде понятно всё.
В первой строке определяется пользовательский тип данных BoolU, область значений которого = { FALSE, TRUE, Unknown }. Далее для только что определённого типа вводится операция &&. В данном случае для её определения достаточно описать её в четырёх выражениях.
Поскольку это декларативная запись, здесь ничего не вычисляется, а, как вы верно заметили, описываются правила вычисления (конкретно здесь — применения операции &&).

Вот тут про это очень доходчиво написано: http://learnyouahaskell.com/making-our-own-types-and-typeclasses

env ★★☆
()
Ответ на: комментарий от matumba

>Ну и вообще, ввиду забытости, маргинальное ФП крутится где-то в академической среде, не представляя особой ценности для реального кодинга. Про их сравнение с ДотНЕТом вообще можно не говорить - мелкософт убежал далеко вперёд.

Я бы не был столь категоричен на вашем месте. Да, действительно, если говорить о бухгалтерском софте, гигантских ERP и прочих подобных штуках, то тут вопросов нет, .NET и Java. Для кодера-за-тыщщу-баксов-в-месяц ничего кроме азов ООП (а то и ПП) и правда не нужно.

Когда появляется сложная логика, выясняется, что её в разы проще закодировать в прологе, например. Ну и вообще декларативный подход в общем применяется много где (скажите ещё, что SQL-запросов никогда не писали).

Спросите у Алекса Отта, например, где он работает и с чем ему приходится иметь дело.

env ★★☆
()
Ответ на: комментарий от matumba

>ФП для того и придумали, чтобы делать всё параллельно - оттуда и мышление пишущих.

ФП придумали для того, чтобы внести более сильную абстракцию, чем позволяли это делать императивные языки того времени. Поскольку у истоков CS стояли люди с сильной математической базой (по-другому тогда было никак), то функциональная абстракция им казалась более логичной и очевидной, нежели казуальная объектно-ориентированная.

env ★★☆
()
Ответ на: комментарий от xintrea

> А я цитато даю про функциональный подход, в описании которого половина действий почему-то пропущена.

В ней последовательность действий в алгоритме РОВНО ТАКАЯ же. Конкретно в описании функционального решения продублирован кусок этого алгоритма для акцентирования внимания.

zabivator
()
Ответ на: комментарий от matumba

> Ну и вообще, ввиду забытости, маргинальное ФП крутится где-то в академической среде, не представляя особой ценности для реального кодинга. Про их сравнение с ДотНЕТом вообще можно не говорить - мелкософт убежал далеко вперёд.

и что-же тогда MS вовсю тянет функциональщину в свои продукты? LINQ, F# за примеры подойдут?

P.S. насчет сравнения дотнета с ФП - это сравнение теплого с мягким

ott ★★★★★
()
Ответ на: комментарий от env

>Да, действительно, если говорить о бухгалтерском софте, гигантских ERP и прочих подобных штуках, то тут вопросов нет, .NET и Java.

Вообще да, есть у меня впечатление, что для осознания полезности ФП необходимо тесное соприкосновение с более нетривиальными, заковыристыми и мозголомательными задачами. Я вот пока не осознал. С декларативным подходом всё более понятно. Но тут уже такое дело - специфический инструмент для специфических задач, там где уместен - рулит, но универсальностью не блещет.

P.S. Это личное мнение, не сильно компетентное.

eduard_pustobaev ★★
()
Ответ на: комментарий от eduard_pustobaev

> Но тут уже такое дело - специфический инструмент для специфических задач, там где уместен - рулит, но универсальностью не блещет

А универсальный инструмент это такой бредовый миф. Или мечта человечества, как вариант.

cab ★★★★
()
Ответ на: комментарий от matumba

> Адвокатура в сторону императивных языков: НУ И ЧТО? Для них тоже есть "параллельные библиотеки". Более того - большинство кода как раз НЕраспараллеливаемые участки, это вам не факториалы считать!

Курить понятия «неразделяемые данные» и «отсутствие побочных эффектов». Некоторые ФП вроде Эрланга могут практически любой кусок кода превратить в параллельно выполняющиеся инструкции.

> На ФП быстрее/лучше/кавайнее/короче писать код. Чушь собачья, более того - и сам код ЛЮБОГО ФЯ - это тихий ужас.

Ну, если мозг прочно захаван С++нутым синтаксисом, то любой код с другим синтаксисом будет выглядеть, как тихий ужас.

Тот же Эрланг требует день на освоение синтаксиса. Через неделю можно начинать писать проекты, которы в жизни на С++ не напишешь. Советую поискать книжку http://www.pragprog.com/titles/jaerlang/programming-erlang — там с нуля (!) shoutcast-server создается. И это — книга _начального_ уровня

dmitriid
()
Ответ на: комментарий от Deleted

Беречь мозг -- это основной принцип. :) Производственная гигиена, можно сказать... :)

gns ★★★★★
()
Ответ на: комментарий от psv1967

> осторожно! жир сочится так, что можно поскользнуться на первом шагу :)

Это не жир. Оно и в самом деле такое тупое.

tailgunner ★★★★★
()

Возможно оффтоп, но все-таки спрошу:
1. Несколько человек собирались перевести (сделать русские субтитры) к видеокурсам по SICP, но дальше 1й "а" серии им энтузиазма не хватило; проект уже год как заброшен. =>
Может, для увеличения количества использующих ФП ст0ило бы возобновить тот перевод? Заранее спс за комментарии.

2. <sumo-troll-mode>
А где интервью с Виталием Луговским?!! O_o
</sumo-troll-mode>

wingless
()
Ответ на: комментарий от wingless

честно говоря, я думал над этим проектом, но посмотрел несколько серий курса по SICP (читаемого в Berkley, а не старого), понял что там все абсолютно понятно и без субтитров - лектор говорит очень отчетливо и не быстро

ott ★★★★★
()
Ответ на: комментарий от env

> Да, действительно, если говорить о бухгалтерском софте, гигантских ERP и прочих подобных штуках, то тут вопросов нет, .NET и Java

Ненене, тут как раз очень удобно хаскелем разбирать отходы жизнедеятельности указанных дотнетов и джав, то есть анализировать логи и данные и делать умные выводы или рисовать понятные схемы. Сам именно этим и занимаюсь применительно к сапу (code.google.com/p/hixay).

chumpa
()
Ответ на: комментарий от env

>> data BoolU = FALSE | TRUE | Unknown
>> FALSE && x = FALSE

>> TRUE && x =x

>> Unknown && FALSE = FALSE

>> Unknown && x = Unknown


> В первой строке определяется пользовательский тип данных BoolU,

> область значений которого = { FALSE, TRUE, Unknown }. Далее для

> только что определённого типа вводится операция &&. В данном случае

> для её определения достаточно описать её в четырёх выражениях.

> Поскольку это декларативная запись, здесь ничего не вычисляется, а,

> как вы верно заметили, описываются правила вычисления (конкретно

> здесь — применения операции &&).


А почему именно "x" используется? Это такое неявное умолчание языка, обозначать через "x" обрабатываемое значение? Или можно было написать любое имя переменной, и хаскель бы это тоже схавал?

xintrea
()
Ответ на: комментарий от ott

>честно говоря, я думал над этим проектом, но посмотрел несколько серий курса по SICP (читаемого в Berkley, а не старого), понял что там все абсолютно понятно и без субтитров - лектор говорит очень отчетливо и не быстро

Ссылочку можно?

Kostafey
()
Ответ на: комментарий от xintrea

>А почему именно "x" используется? Это такое неявное умолчание языка, обозначать через "x" обрабатываемое значение? Или можно было написать любое имя переменной, и хаскель бы это тоже схавал?

Можно задать любое имя (кроме «_»). Хаскеллю не важно, TRUE && x = x или TRUE && yetanothername = yetanothername, код генерируется одинаковый. В Haskell нету переменных с состоянием, это только параметры функций. В конце концов не всё ли равно, напшиете вы
int r (int x) { return x; }
или
int returnme ( int r (int yetanothername) { return anothername; }

Вообще конечно у Романа хороший справочник, но учебник не очень удачный. И вводные статьи писать не получается. Если хотите разобраться с нуля, лучшего чем lyahfgg (на который я кидал ссылку выше) не найти.

env ★★☆
()
Ответ на: комментарий от chumpa

Я немного о другом говорил. Анализ логов в принципе задача для одного человека, и тут эффективным будет то, что ему больше всего знакомо/удобно. А разработка ERP какой — как правило работа для тысячи китайцев. В таких условиях выбора в общем-то особого не остаётся.

env ★★☆
()
Ответ на: комментарий от env

>А разработка ERP какой

Смотря что понимать под разработкой ERP. У любой системы такого рода должна быть крайне высокая конфигурируемость => управление метаданными, встроенный язык, визуальные редакторы.

А уж миллионы китайцев будут писать под нее конфигурации.

Macil ★★★★★
()
Ответ на: комментарий от matumba

> Ну и вообще, ввиду забытости, маргинальное ФП крутится где-то в академической среде, не представляя особой ценности для реального кодинга. Про их сравнение с ДотНЕТом вообще можно не говорить - мелкософт убежал далеко вперёд.

F#?

вырдикт : апстену

cap838383
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.