В частности по мотивам - http://18delphi.blogspot.ru/2013/07/blog-post_9746.html
Более "правильное" недавнее обсуждение - может быть Роман Янковский напомнит ссылку.
Я по-моему понял, что такое монады в функциональных языках. Если не понял - поправьте меня пожалуйста.
Монада это "точка с запятой" :-)
Смешно наверное. Но именно эта метафора натолкнула меня на "путь понимания". Спасибо её автору.
Монада - это НЕ ФУНКЦИЯ и НЕ СПОСОБ конструирования ФУНКЦИЙ.
Монада - это "императивная надстройка" над "чистой функциональностью".
Монада - это "шаблон проектирования" (спасибо Роману Янковскому) позволяющий из "чистых функций" КОНСТРУИРОВАТЬ "функционал".
Монада - это цепочка "чистых функций".
Моднада конструктивно находится НАД функциями.
Монада позволяет ОПРЕДЕЛИТЬ "контекст" тех функций, которые она "связывает".
В этом смысле функции служат для монады "лямбдами". Хотя это наверное - "масло масляное".
Функции НЕ ОПИРАЮТСЯ на монады. А монады связывают функции в цепочки.
Монаду НЕЛЬЗЯ кешировать или параллелить. Кешировать или параллелить можно лишь функции, которые связывает монада.
Нет ФУНКЦИИ чтения из файла. Есть монада, которая читает из файла и передаёт результат чтения в "связанные" функции.
Нет ФУНКЦИИ записи в файл. Есть монада, которая берёт результат работы "связанных" функций и записывает в файл.
Нет ФУНКЦИИ Random. Есть монада, которая берёт значение генератора случайных чисел и передаёт его АКТУАЛЬНОЕ значение в "связанные" функции.
Нет ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ, есть монада, которая читает значение из "слота памяти" и передаёт в "связанные" функции. Аналогично - есть монада, которая берёт результат "связанных" функций и кладёт его в "слот памяти".
Т.е. в "широком смысле" - монада - это средство порождения КЛАССА ФУНКЦИЙ, параметризуемых ВНЕШНИМ КОНТЕКСТОМ. Который определяет монада.
И все "вкусности" функционального подхода работают лишь ВНУТРИ функций. Может быть "связанных" монадами.
Поправьте меня, если я неправ.
P.S. Особенно мне понравилась метафора Янковского - "если бы я рассказывал бы функциональщику, что такое объекты - я бы начал бы с понятия лямбд".
P.P.S. Нашёл кстати тут
http://dic.academic.ru/dic.nsf/enc_philosophy/753/%D0%9C%D0%9E%D0%9D%D0%90%D0%94%D0%90
" МОНАДА (от греч. μονάς, родит, падеж μονάδος — единица, единое; лат. monas) — неделимое несоставное единство, мера и прообраз числа. Монада — начало бытия, материей которому служит другое, “неопределенная двоица”, диада (Диог. Л. VIII 25); но материю можно считать также ее аспектом. С монадой связана проблематика неделимой несоставной точки (там же, III 107; Аристотель. “Метафизика”, Χ l, 1953a 27; XIV 2,1089b 25; Марциан Капелла К)"
Только "исходя из того, что я понял" - МОНАДА (в функциональных языках) - вполне себе ДЕЛИМА.
P.P.P.S. Кстати и тут - http://18delphi.blogspot.com/2013/10/blog-post_21.html
Написано вот что:
"Монада это не дополнительное понятие. Это такое же понятие как "коллекция", "итератор", итд. А помогает она тем, что может просто описать императивность, последовательность действий. Но именно описать, а не совершить."
И ещё - "Обычно соединение монады и монадической функции выглядит так: после того как будет выяснено значение монады, оно будет передано функции, которая вернёт ещё одну монаду. А там они уже радостно соединятся как монада - монада. =)
Монадическая функция служит только для создания монады."
Более "правильное" недавнее обсуждение - может быть Роман Янковский напомнит ссылку.
Я по-моему понял, что такое монады в функциональных языках. Если не понял - поправьте меня пожалуйста.
Монада это "точка с запятой" :-)
Смешно наверное. Но именно эта метафора натолкнула меня на "путь понимания". Спасибо её автору.
Монада - это НЕ ФУНКЦИЯ и НЕ СПОСОБ конструирования ФУНКЦИЙ.
Монада - это "императивная надстройка" над "чистой функциональностью".
Монада - это "шаблон проектирования" (спасибо Роману Янковскому) позволяющий из "чистых функций" КОНСТРУИРОВАТЬ "функционал".
Монада - это цепочка "чистых функций".
Моднада конструктивно находится НАД функциями.
Монада позволяет ОПРЕДЕЛИТЬ "контекст" тех функций, которые она "связывает".
В этом смысле функции служат для монады "лямбдами". Хотя это наверное - "масло масляное".
Функции НЕ ОПИРАЮТСЯ на монады. А монады связывают функции в цепочки.
Монаду НЕЛЬЗЯ кешировать или параллелить. Кешировать или параллелить можно лишь функции, которые связывает монада.
Нет ФУНКЦИИ чтения из файла. Есть монада, которая читает из файла и передаёт результат чтения в "связанные" функции.
Нет ФУНКЦИИ записи в файл. Есть монада, которая берёт результат работы "связанных" функций и записывает в файл.
Нет ФУНКЦИИ Random. Есть монада, которая берёт значение генератора случайных чисел и передаёт его АКТУАЛЬНОЕ значение в "связанные" функции.
Нет ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ, есть монада, которая читает значение из "слота памяти" и передаёт в "связанные" функции. Аналогично - есть монада, которая берёт результат "связанных" функций и кладёт его в "слот памяти".
Т.е. в "широком смысле" - монада - это средство порождения КЛАССА ФУНКЦИЙ, параметризуемых ВНЕШНИМ КОНТЕКСТОМ. Который определяет монада.
И все "вкусности" функционального подхода работают лишь ВНУТРИ функций. Может быть "связанных" монадами.
Поправьте меня, если я неправ.
P.S. Особенно мне понравилась метафора Янковского - "если бы я рассказывал бы функциональщику, что такое объекты - я бы начал бы с понятия лямбд".
P.P.S. Нашёл кстати тут
http://dic.academic.ru/dic.nsf/enc_philosophy/753/%D0%9C%D0%9E%D0%9D%D0%90%D0%94%D0%90
" МОНАДА (от греч. μονάς, родит, падеж μονάδος — единица, единое; лат. monas) — неделимое несоставное единство, мера и прообраз числа. Монада — начало бытия, материей которому служит другое, “неопределенная двоица”, диада (Диог. Л. VIII 25); но материю можно считать также ее аспектом. С монадой связана проблематика неделимой несоставной точки (там же, III 107; Аристотель. “Метафизика”, Χ l, 1953a 27; XIV 2,1089b 25; Марциан Капелла К)"
Только "исходя из того, что я понял" - МОНАДА (в функциональных языках) - вполне себе ДЕЛИМА.
P.P.P.S. Кстати и тут - http://18delphi.blogspot.com/2013/10/blog-post_21.html
Написано вот что:
"Монада это не дополнительное понятие. Это такое же понятие как "коллекция", "итератор", итд. А помогает она тем, что может просто описать императивность, последовательность действий. Но именно описать, а не совершить."
И ещё - "Обычно соединение монады и монадической функции выглядит так: после того как будет выяснено значение монады, оно будет передано функции, которая вернёт ещё одну монаду. А там они уже радостно соединятся как монада - монада. =)
Монадическая функция служит только для создания монады."
-- вот это вроде "о том же", но уже не вяжется с "моим пониманием".
Я вот это "оно будет передано функции, которая вернёт ещё одну монаду" - не понял.
P.P.P.P.S. Даже если я ВСЁ ПОНЯЛ НЕПРАВИЛЬНО - всё равно - я теперь знаю как "в байтах" написать собственный "функциональный язык". Если вдруг понадобится.
P.P.P.P.S. Даже если я ВСЁ ПОНЯЛ НЕПРАВИЛЬНО - всё равно - я теперь знаю как "в байтах" написать собственный "функциональный язык". Если вдруг понадобится.
Ссылку напоминаю: http://juick.com/Kerk/2555063
ОтветитьУдалить>Монада - это "императивная надстройка" над "чистой функциональностью".
ОтветитьУдалитьМонада может помочь в описании последовательности действий, но это не обязательно. Есть множество монад, служащих для других целей.
>Монада - это цепочка "чистых функций".
Есть такие монады, а есть и другие. =)
>Я вот это "оно будет передано функции, которая вернёт ещё одну монаду" - не понял.
Оператор >>= склеивает монаду и монадическую функцию(т.е функцию, возвращающую монаду), возвращая монаду. Первая монада содержит значение, необходимое для получения монады из монадической функции(исполнив её). Таким образом после вычисления значения первой монады, оно передастся в функцию, которая вернёт монаду. Теперь первую монаду можно соеденить с получившейся второй.