Добрый день, уважаемые хабровчане.
Всегда сложно начинать.
Трудно начать писать статью, сложно завязать отношения с человеком.
Начать изучать новый язык программирования может быть очень сложно, особенно если этот язык разрушает все идеи и основы, которые у вас были, если он противоречит вашей привычной картине мира и пытается сломать вам мозг.
Примером такого языка является Haskell.
Почему вы не можете просто переключиться на Haskell?
«Вы все избалованы императивным стилем!» - вот что рассказал нам наш первый преподаватель функциональных языков, замечательный человек, ученый и организатор Сергей Михайлович Абрамов.И он был прав.
Как сложно было забыть о переменных, присваиваниях, алгоритмах и начать мыслить функциями.
Вы можете сесть и написать программу на Haskell, без проблем.
Вы можете построить вложенный цикл, использовать переменные и присваивания, это легко! Но потом вы смотрите на свой код и говорите: «Кому нужен этот функционал? Да, я могу писать на C быстрее и лучше».
А все потому, что невозможно перенести императивный стиль программирования на функциональный язык.
Вы не можете заставить рыбу летать или птицу плавать.
Вы не можете быть уткой, которая не умеет плавать или летать.
В функции нужно погружаться с головой, их нужно чувствовать косточками.
Только так вы полюбите этот язык и не сможете писать ни на чем другом.
Но как, как это сделать?
Прочтите предисловие
Ответ прост. Всего два слова.Прочтите предисловие! Если вы хотите понять и полюбить Haskell, если вы хотите изучить чистый функциональный стиль, прочтите Prelude. Prelude — это стандартная библиотека самых необходимых функций, определенная стандартом Haskell 98. Каждая линия, каждая точка выверена и отшлифована, ничего лишнего и обязательного там не обнаружено.
Читая прелюдию, испытываешь эмоции, сравнимые с эмоциями при чтении интересной фантастической книги.
Одна из моих любимых частей прелюдии — это раздел, где описывается работа со списками.
Возьмем, к примеру, функцию карты.
Помните — мы мыслим функциями.map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = f x : map f xs
Какова функция карты? На входе у нас есть некоторая функция из множества A в множество B и список элементов из множества A. На выходе мы должны получить список из множества B, применив функцию к каждому элементу списка.
Эта функция — отличный пример одного из основных приемов работы в Haskell — шаблонов.
Карта с входными параметрами вида a f [] (функция и пустой список) вернет пустой список.
В противном случае f будет применена к первому элементу списка, а полученный элемент будет добавлен (двоеточие) к списку, сформированному путем применения функции карты к хвосту списка.
Одним из главных преимуществ Haskell является то, что после того, как вы сформулировали функцию на математическом языке, ее программирование обычно занимает несколько минут.
Еще несколько примеров
И вот еще чудо: голова и хвост функционируют, ну просто загляденье! head :: [a] -> a
head (x:_) = x
head [] = error "Prelude.head: empty list"
tail :: [a] -> [a]
tail (_:xs) = xs
tail [] = error "Prelude.tail: empty list"
Думаю, тут даже объяснять нечего.
Подчеркивание в шаблонах Haskell означает «что угодно».
null :: [a] -> Bool
null [] = True
null (_:_) = False
Неужели есть люди, которым это не нравится?
А вот длина функции.
length :: [a] -> Int
length [] = 0
length (_:l) = 1 + length l
Как класс Eq определен в прелюдии? Вы будете смеяться! class Eq a where
(==), (/=) :: a -> a -> Bool
-- Minimal complete definition:
-- (==) or (/=)
x /= y = not (x == y)
x == y = not (x /= y)
Неужели это головокружительная красота?
О чем я говорю?
У нас могло бы быть много примеров кода, но зачем портить вам удовольствие? Всем новичкам, всем, кто хочет влюбиться в Haskell, один совет — прочтите прелюдию.Я читаю и пытаюсь писать как бы в прелюдии.
По крайней мере, я стремлюсь.
Читая прелюдию, я понял философию Haskell и влюбился в этот язык, чего и вам всем желаю! Извините за сумбурность, я наверное не писатель, очень плохо объяснил всё, что нужно, но мне очень хотелось поделиться с вами частичкой своей любви к Haskell и этим небольшим, но очень полезным советом.
Прочтите предисловие! Теги: #Функциональное программирование #haskell #haskell #Функциональное программирование
-
Phpunit && Упорядоченные Тесты
19 Oct, 24 -
Кварцевый Композитор: Music Cube
19 Oct, 24 -
Почему Google Использует Домен Duck.com?
19 Oct, 24 -
Компьютерный Вирус – Желание Живого?
19 Oct, 24 -
По Итогам Второго Минского Startup Weekend
19 Oct, 24