Главная » Статьи для тега "Haskell"

Технология сопоставления с образцами

Добавлено Дата: 28 June, 2012 категория: Haskell

Образцы в функциональном программировании заменяют то, что в  традиционном (императивном) программировании называется  переменной. В языке Haskell переменных нет. Однако слово «образец» не является синонимом слова

«переменная». Это даже  не синоним словосочетания «формальный  параметр», как это могло показаться после изучения приводимых до этого момента определений функций. Образцы являются частью  технологии сопоставления с образцами, которая используется для выполнения вычислительных  процессов внутри функций в части  означивания формальных параметров и сравнения фактических величин (значений) с определёнными шаблонами.

Читать »

Бесточечная нотация

Добавлено Дата: 26 June, 2012 категория: Haskell

В функциональном программировании очень часто функции  определяются при помощи композиции других функций без обращения внимания на то, сколько аргументов в действительности функция принимает. Например, уже приводился пример функции sum из стандартного модуля Prelude, которая определена в нём следующим образом (подробно эта функция описывается на стр. 311):

Читать »

Модуль Storable интерфейс для маршализации

Добавлено Дата: 24 June, 2012 категория: Haskell

В модуле Storable описан важнейший интерфейс для маршализации — класс Storable. Этот класс предоставляет интерфейсные функции для осуществления примитивного маршалинга типов данных, а потому является непосредственной частью системы FFI языка Haskell. Предполагается, что этот модуль подключается в проект при помощи реимпорта из модуля Foreign, однако если имеется необходимость использования этого модуля отдельно, его можно подключить следующим образом:

Читать »

Модуль Read

Добавлено Дата: 23 June, 2012 категория: Haskell

В модуле Read определены  программные сущности, позволяющие  преобразовывать строки в значения произвольных типов. Этот  модуль, как и многие иные в стандартной поставке, является экспериментальным, созданным с целью разгрузки  стандартного модуля  Prelude  от программных сущностей. Правда, необходимо отметить,  что  в этом модуле для компилятора  GHC имеются расширенные  возможности по использованию функций синтаксического анализа. В частности, создана улучшенная версия класса Read (см. стр. 121), которая позволяет производить  более эффективный синтаксический анализ.

Читать »

Образцы вида (n + k)

Добавлено Дата: 20 June, 2012 категория: Haskell

В  целях обеспечения  совместимости с  математической нотацией  в  языке  Haskell имеется возможность использования так  называемых  образцов вида (n + k). Это значит, что в образцах можно использовать символ (+), который обозначает арифметическое  сложение  чисел. Другими  словами, для числовых значений можно использовать выражение последующих вычисляемых  элементов последовательности через уже имеющиеся. Такой способ представления формул принят в математике, а потому в языке Haskell было решено внедрить эту технику.

Читать »

Prelude: Операторы

Добавлено Дата: 19 June, 2012 категория: Haskell

Операторы — это простые функции одного или двух аргументов. Бинарные (двухместные) операторы обычно ставятся между своих аргументов (инфиксная нотация), вместо того, чтобы ставиться  слева, как это принято для функций. Многие операторы имеют символьное обозначение (например,  (+)) для оператора сложения), однако можно писать и полные имена (для сложения — plus). Другие операторы имеют только текстовые названия (такие как div  для осуществления целочисленного деления).

Читать »

Типы данных

Добавлено Дата: 17 June, 2012 категория: Haskell

Язык Haskell обладает достаточно развитой системой типов, в которую включены не только сами типы данных, но и некоторые другие механизмы, позволяющие работать с типами. Более того, из-за принятой в языке модели типизации (статическая модель Хиндли-Милнера) в трансляторах  имеется мощнейший механизм  вывода типов, который  позволяет самостоятельно вычислять типы  выражений, функций и других объектов. Этот механизм в  дополнение нагружен системой классов, которые могут рассматриваться в качестве ограничений и интерфейсов. Всем этим аспектам языка посвящена эта и следующая главы.

Читать »

Простые структуры

Добавлено Дата: 15 June, 2012 категория: Haskell

Та же  технология определения алгебраических  структур  данных  используется и для создания типов, которые в других языках программирования носят названия «структуры» или «записи». Такие типы данных отличаются тем, что содержат некоторый набор полей, каждое из которых может быть какого-либо типа, но при этом весь такой набор рассматривается как единое и целостное значение.

Читать »

Анонимные функции

Добавлено Дата: 13 June, 2012 категория: Haskell

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

Читать »

Рекурсия и корекурсия

Добавлено Дата: 7 June, 2012 категория: Haskell

В языке Haskell нет таких операторов, как for, while или goto. Это связано с тем, что эти операторы явно императивны, то есть они  определяют пошаговый порядок исполнения некоторых инструкций.  Как  уже  было неоднократно упомянуто, язык Haskell, как чистый функциональный язык, не имеет (и не должен иметь) подобных средств. Для организации цикла здесь используется другой механизм — рекурсия.  А такая конструкция, как безусловный переход, просто невыразима в терминах функционального программирования.

Читать »

Синонимы типов

Добавлено Дата: 7 June, 2012 категория: Haskell

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

Читать »

Абстракция  данных при помощи модулей

Добавлено Дата: 5 June, 2012 категория: Haskell

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

Читать »

Синтаксис и идиомы языка

Добавлено Дата: 4 June, 2012 категория: Haskell

Функции

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

Читать »

Модуль StablePtr

Добавлено Дата: 4 June, 2012 категория: Haskell

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

Читать »

Модуль Concurrent

Добавлено Дата: 31 May, 2012 категория: Haskell

Модуль  Concurrent   предлагает разработчику  программного   обеспечения обобщённый интерфейс для работы с несколькими потоками управления в программах. Однако необходимо  отметить,  что  многопоточность в языке  Haskell не входит в стандарт, а определяется расширениями.

Читать »