Язык Haskell: О пользе и вреде лени: различия между версиями

обновление, викификация
(обновление, викификация)
: <small>Исходная версия статьи (Ворожцов&nbsp;А.&nbsp;В., «Язык Haskell: О пользе и вреде лени») была опубликована в [[Журнал «Потенциал»|журнале «Потенциал»]]</small>
 
[[ИзображениеФайл:2_1.jpg|right|]]
 
В большинстве российских школ на уроках программирования изучают языки программирования [[w:Паскаль (язык программирования)|Паскаль]], [[:w:Си (язык программирования)|Си]] или [[:w:Java|Java]]. Все они суть [[w:Процедурное_программирование|императивные языки программирования]], в которых алгоритмы описываются как последовательность действий.
 
Здесь мы познакомимся с иным методом разработки программ  — [[w:Функциональное программирование|функциональным программированием]], а также узнаем, что такое [[w:Ленивые вычисления|«ленивые» вычисления]]. Лень, как известно,  — двигатель прогресса. Не удивительно, что лень сыграла значительную роль в развитии языков программирования. Программисты ужасно ленивы! Они хотят для решения сложных задач писать простые короткие программы. В своей ленивости программисты уступают, пожалуй, только начальникам.
 
Программы на [[w:функциональный язык программирования|функциональном языке программирования]] выглядят как определения того, что нужно вычислить, а последовательность элементарных действий, на которые раскладывается программа, остаётся скрытой. Функциональное программирование позволяет реализовать давнюю мечту программистов: «Я описываю, ''что'' мне нужно получить, а уж компьютер сам должен догадаться, ''как'' это сделать».
…</code>
 
[[ИзображениеФайл:2_2.jpg|right|frame|Карикатура «Учись лениться!»]]
 
Это последовательность, которая остаётся равна сама себе после добавления единицы в начало. Неленивые языки, которым не терпитcя сделать сразу то, что от них просят, очень скоро получат ошибку исполнения (например, ошибку переполнение памяти). Ленивый язык Haskell не спешит раскрывать определение, данное ему справа от знака «равно», а раскрывает его по мере необходимости. Такое «равно» называют «ленивым равно», оно по сути означает определение функции, а не операцию присваивания. Есть функциональные языки, в которых есть два типа «равно» — ленивое (определение функции) и неленивое (вычисление выражения справа и присваивание результата переменной, что слева от знака «равно»). Например, в языке [[w:Mathematica|Mathematica]] (http://wolfram.com) для определения функций используется <code>:=</code>, а для присваивания — просто <code>=</code>.
Подобным образом на Haskell многие алгоритмы можно записать гораздо короче, нежели на Си, Паскале да и вообще любом императивном языке.
 
[[ИзображениеФайл:2_3.jpg|right|]]
 
Извините, если не весь изложенный материал вам понятен. В одной обзорной статье сложно дать полноценное введение в язык программирования. Большинство приведённых примеров интуитивно ясны, но их, безусловно, недостаточно, чтобы самому начать писать программы на Haskell. У автора остаётся надежда на то, что вы заинтересуетесь и опробуете все эти примеры, установив на своем локальном компьютере интерпретатор языка Haskell, и прочитаете обучающие материалы, представленные на сайтах http://haskell.org/, <!-- ссылка не работает: http://wtk.norilsk.net/pm/fp/haskell.html, -->http://www.haskell.ru/.
* [http://www.haskell.org/ Официальная страница языка Haskell]
* [http://www.haskell.ru/ Полный перевод описания Haskell на русский язык]
<!-- ссылка не работает: * [http://wtk.norilsk.net/pm/fp/haskell.html Введение в язык Haskell Михаила Потанина]-->
 
== Примечания ==
536

правок