|
||||||||||||||||||||||||||||||||||||||||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[0] ДУШКИН Роман Викторович darkus@yandex.ru http: roman-dushkin.narod.ru/ ВСЁ О МОНАДАХ АННОТАЦИЯ This tutorial aims to explain the concept of a monad and its application to functional programming in a way that is easy to understand and useful to beginning and intermediate Haskell programmers. Familiarity with the Haskell language is assumed, but no prior experience with monads is required. The tutorial covers a lot of material and the later sections require a thorough understanding of the earlier material. Many code examples are provided along the way to demonstrate monadic programming. It is not advisable to attempt to absorb all of the material in a single reading. The tutorial is arranged in three parts. The first part provides a basic understanding of the role of monads in functional programming, how monads operate, and how they are declared and used in Haskell. The second part covers each standard monad in Haskell, giving the definition of the monad and discussing the use of the monad. The third part covers advanced material relating to monad transformers and real-world issues encountered when programming with monads.
m tn 3 3 ИГ о* "О VO 00 О On 00 00 00 00 00 -О О оо оо оо оо о о о О 1. ПОНЯТИЕ МОНАДЫ 1.1. Введение 1.1.1.Что такое «монада»? Монада - это способ структурировать вычисления с точки зрения значений и последовательностей вычислений, использующих эти значения. Монады позволяют программисту строить вычисления, используя последовательные модули, которые сами могут быть последовательностями вычислений. Монада определяет, каким образом вычисления комбинируются для создания новых вычислений, тем самым освобождая программиста от необходимости кодировать комбинацию вручную каждый раз, когда она потребуется. Можно считать монаду стратегией комбинирования вычислений в более сложные вычисления. Например, в стандартной поставке языка Haskell имеется тип Maybe: data Maybe a = Nothing Just a Этот тип представляет собой тип вычислений, которые не всегда могут выдать результат. Тип Maybe предлагает алгоритм комбинирования вычислений, которые возвращают значения типа Maybe: если комбинированное вычисление состоит из вычисления B, которое зависит от результата вычисления А, тогда комбинированное вычисление должно выдавать Nothing в случае, если А или B возвращают Nothing, и комбинированное вычисление должно выдавать результат вычисления B, применённого к результату вычисления А, в случае если А и В завершились успешно. Существуют также монады для построения вычислений, выполняющих операции ввода/вывода, имеющих состояния или возможность возврата множества результатов и т. д. Различных типов монад так же много, как и стратегий комбинирования вычислений, но некоторые из них настолько хороши и удобны, что были включены в стандартные библиотеки Haskell 98. Эти монады подробно описаны во второй части данного руководства. 1.1.2.Зачем пытаться понять монады? Огромное число различных пособий по изучению монад в сети интернет подтверждают проблематичность осваивания людьми данного понятия. Это объясняется абстрактной природой монад и тем фактом, что они используются в нескольких различных качествах, которые могут внести неясность в определение и назначение монад.
В языке Haskell монады играют центральную роль в системе ввода/вывода. Не обязательно разбираться в монадах для использования ввода/вывода в Haskell, но понимание монады IO оптимизирует код и расширяет возможности программиста. Для программиста монады - удобный инструмент для структурирования функциональных программ. Существует 3 свойства монад, которые делают их особенно полезными: Модульность - монады позволяют комбинировать вычисления из более простых вычислений и отделять алгоритм комбинирования от фактического выполнения вычислений. Гибкость - монады позволяют функциональным программам быть гораздо более адаптивными, чем аналогичные программы, написанные без использования монад. Это происходит благодаря тому, что монады помещают стратегию вычислений в одном-единственном месте программы вместо того, чтобы распределять его по всему коду. 3) Изолированность - монады могут быть использованы для создания императивных вычислительных структур, которые остаются изолированными от основного кода функциональной программы. Это полезно для использования побочных эффектов (таких как ввод/вывод) и состояний (которые нарушают прозрачность ссылок) в таком чистом функциональном языке, как Haskell. К каждой из этих особенностей вернёмся позднее при рассмотрении конкретных монад. 1.2. Знакомство с монадами Мы будем использовать конструктор типов Maybe на протяжении этой главы, поэтому прежде, чем идти дальше, необходимо ознакомиться с определением и использованием типа Maybe. 1.2.1. Конструкторы типов Чтобы понять монады в языке Haskell, необходимо хорошо ориентироваться в конструкторах типов. Конструктор типов - это параметризованное определение типа, используемое с полиморфными типами. Применяя конструктор типов к одному или более конкретным типам, можно сконструировать новый конкретный тип в языке Haskell. В определении Maybe: data Maybe a = Nothing Just a Монада Maybe - это конструктор типов, а Nothing и Just - конструкторы данных. Можно задать значение данных, применив конструктор данных Just к значению:
|
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||