LINUX.ORG.RU

Функциональное программирование на Haskell : Часть 1. Введение

 


0

0

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

>>> Подробности

★★★

Проверено: boombick ()

Тем, кому нужно введение в хаскель, не помешает еще знать, зачем им нужен хаскель. Тема не раскрыта.

metar ★★★
()
Ответ на: комментарий от mclaudt

> Снятся ли петросянам вроде тебя IBM-овцы?

только неумеющим писать, вроде тебя

lester ★★★★
()
Ответ на: комментарий от metar

> зачем им нужен хаскель. Тема не раскрыта

Тонко :D

Manhunt ★★★★★
()

прошли функциональное программирование в универе год назад (на 4м курсе)
преподавали нам, правда, пролог

TERRANZ ★★★★
()
Ответ на: комментарий от TERRANZ

Капитан Очевидность напоминает, что пролог является языком не функционального программирования, а логического.

anonymous
()
Ответ на: комментарий от kristall

> А в целом Хаскелл не нужен.

В целом Хаскелл нужен, но просто далеко-далеко-далеко не всем.
А если сравнивать с другими языками, то, например, судя по количеству и качеству компиляторов, он даже более нужен, чем, скажем, D
(сколько запятых :D, граммар наци - все правильно?)

anonymous
()
Ответ на: комментарий от mclaudt

> Как и всегда, добротно и вкусно. Начинающим будет полезно.


ООо! Слава бимерам. Теперь даже закоренелые похиписты смогут вести высокоинтеллектуальные беседы на ЛОРе! Я счастлив

valich ★★★
()

Почитал, прикольный язык. Но нужен _только_ для вычислений, использовать его для прикладного софта (см. xmonad, darcs итп) - фанатизм и красноглазие на границе с маразмом.

Divius ★★
()
Ответ на: комментарий от Manhunt

>Пруф?

Мне, скажем так, кажется проблематичным будущее языка где для одной из базовых операций типа DO from to вводится понятие монады, вокруг которой вот уже пару лет пасутся просто таки горы фриков с удовольствием объясняющих другу другу какая это крутая штука и как она полезна. Знаю, вы будете расказыать о DSL и критических приложениях, упомяните и atom и бетономешалку, а также подразделение Свисс-банка, где используется Хаскелл, ну и пусть. Массовым он не будет и точка. StateMonad это то что не позволить ему таким стать (для начала).

kristall ★★
()

Да и кстати, после книг Худака и Сулливана совершенно не понятно зачем писать какие-то статьи по сабжу.

kristall ★★
()
Ответ на: комментарий от anonymous

> А если сравнивать с другими языками, то, например, судя по количеству и качеству компиляторов, он даже более нужен, чем, скажем, D (сколько запятых :D, граммар наци - все правильно?)

Грамма-наци негодуэ! Слово «даже» нужно было выделить запятыми!

anonymous
()
Ответ на: комментарий от Manhunt

Нельзя доказать ненужность. Ненужность подразумевается по умолчанию, пока не доказана нужность.

anonymous
()
Ответ на: комментарий от Divius

Тормозной ленивый язык - и для вычислений?!? Никогда. Для вычислений специальные языки есть - Octave, R...

anonymous
()
Ответ на: комментарий от valich

>>ООо! Слава бимерам. Теперь даже закоренелые похиписты смогут вести высокоинтеллектуальные беседы на ЛОРе! Я счастлив

В определённых кругах твою реакцию назвали бы баттхертом.

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

Боги горшки не обжигают, и на хаскелях не пишут .

mclaudt
()
Ответ на: комментарий от anonymous

Да вот именно. Именно не просто далеко, а далеко-далеко не всем. Да и кстати, удивляет полный игнор сообществом свежей книги Худака «The Haskell School of Musik» которая по моему есть в сободном доступе. Во всяком случае у Бешенова в «ресурсах» её нет. А жаль.

kristall ★★
()

Спасибо, обязательно прочту.

keeper_b ★★★★
()
Ответ на: комментарий от anonymous

>> А если сравнивать с другими языками, то, например, судя по количеству и качеству компиляторов, он даже более нужен, чем, скажем, D (сколько запятых :D, граммар наци - все правильно?)

Грамма-наци негодуэ! Слово «даже» нужно было выделить запятыми!

Врёшь, не нужно. Хотя теоретически можно.

ubuntulover
()

знакомый автор, хорошая статья

jtootf ★★★★★
()
Ответ на: комментарий от Divius

> Почитал, прикольный язык. Но нужен _только_ для вычислений, использовать его для прикладного софта (см. xmonad, darcs итп) - фанатизм и красноглазие на границе с маразмом.

Маразм это когда кто-то рассуждает о наличии или отсутствии профита не зная сабжа.

anonymous
()

Сервер web приложений теперь называется не happs, а happstack

Могу назвать его киллер-фичу (не конкретно happstack, а языка haskell применительно к веб разработке) - использование монады Error (ErrorT) для получения параметров https запросов с автоматической их проверкой. Пишется в несколько строк и намного проще, чем классы - валидаторы, например, php.

anonymous
()
Ответ на: комментарий от anonymous

использование монады Error (ErrorT) для получения параметров https запросов


Несколько лет изучать теорию категорий что бы записать получение параметров https запросов через монады? То, что любой школьник помусолив полгода php, напишет вермишелью бесплатно? Вот школьнику в результате и закажут создание ПО «бесплатно», а не бородатому к.т.н-у который запросит за свой хацкель 100000 руб/мес

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

> Несколько лет изучать теорию категорий что бы записать получение

параметров https запросов через монады? То, что любой школьник

помусолив полгода php, напишет вермишелью бесплатно? Вот школьнику в


результате и закажут создание ПО «бесплатно», а не бородатому к.т.н-у


который запросит за свой хацкель 100000 руб/мес



Именно так всё и происходит. В результате у заказчика проект не укладывается ни в бюджет, ни в сроки. Школьник в определённый момент начинает плеваться от своего кода и ему процесс разработки причиняет всё больше и больше головной боли, затраты на поддержку проекта постоянно увеличиваются. Качество программы при этом ужасно. Ну а к.т.н. если не попадёт под распил какого-нибудь гранта, то его судьба незавидна.

А ведь процесс разработки на haskell гораздо комфортнее, не нужно в голове удерживать так много информации, по причине применения грамотных абстракций. Поэтому многие согласились бы разрабатывать на этом языке даже за гораздо меньшую оплату, чем 100000 руб/мес, особенно взамкадье.

Впрочем, это несколько идеологические вопросы и здесь не может быть чёткой оценки.

Однако Galois, к примеру, совсем не страдает от неиспользования java или с++, а ведь им знакомы эти технологии. Многие же организации, использующие традиционные инструменты промышленного программирования, просто ничего не знают и знать не хотят о haskell.

anonymous
()
Ответ на: комментарий от anonymous

> Поэтому многие согласились бы разрабатывать на этом языке даже за гораздо меньшую оплату, чем 100000 руб/мес
Эти многие и сами бы доплатили, лишь бы на ЛОРе похвастаться, мол на хаскеле кто-то где-то да пишет энтерпрайзнутые приложения :)

sli
()
Ответ на: комментарий от sli

http://www.rsdn.ru/article/haskell/haskell_part1.xml
http://haskell.org/haskellwiki/Ru/Haskell

На русском чрезвычайно мало информации по haskell, боюсь без знания английского не обойтись.

Все прикладные библиотеки документированы только на английском.
http://hackage.haskell.org/packages/archive/pkg-list.html

anonymous
()
Ответ на: комментарий от anonymous

Это ж не winfaq, к чему такие предупреждения?
После первого километра линуксовых мануалов человек начинает читать технический английский с той же лёгкостью, что и литературный русский :)

sli
()
Ответ на: комментарий от Divius

>Но нужен _только_ для вычислений

Если нужно считать быстро, то лучше уж на С. А если нужно считать удобно, то выше уже упомянули Octave и R. Хацкель явно нужен для чего-то другого. Жду следующих статей, может все же пойму, для чего же?

Toll ★★
()
Ответ на: комментарий от anonymous

«ДАННЫХ НЕДОСТАТОЧНО ДЛЯ ОСМЫСЛЕННОГО ОТВЕТА.» © Мультивак

anonymous
()
Ответ на: комментарий от sli

>Это ж не winfaq, к чему такие предупреждения? После первого километра линуксовых мануалов человек начинает читать технический английский с той же лёгкостью, что и литературный русский :)

Не-не-не, не с той же легкостью. Читаю мануалы на англицком и матюкаюсь каждый раз. Ну не люблю я языки с детства, включая русский. Но, русский сам выучился, а английкий еще учить надо.

Toll ★★
()
Ответ на: комментарий от Toll

Если нужно считать быстро, то лучше уж на С


Intel, AMD, IBM, NVIDIA, и даже Sun согнулись поперек, от смеха. LOL. Им-то спешить некуда, и поэтому они разрабатывают фреймворки для научных расчетов http://ppl.stanford.edu/wiki/index.php/Projects на.... чем бы ты думал?



Ну конечно, не на C

Karapuz ★★★★★
()

Начал читать статью. Не могу понять, как работает программа из двух строк.

fac 0 = 1

fac n = n * fac (n-1)

n – формальный аргумент функции fac. В правой части после знака = описано, что функция делает со своим аргументом. Базовые функции для умножения и вычитания записаны через инфиксные (указываемые между аргументами) операторы * и -.

Здесь уравнений два. При вычислении функции уравнения просматриваются по порядку. Если n = 0, то будет использовано первое уравнение. Если n ≠ 0, то оно не подойдет, и задействуется второе.

Первый вопрос. Почему уравнений две штуки? Что означает «fac»? Это символьный идентификатор уравнения? Это символьный идентификатор функции, к которой принадлежат уравнения?

Второй вопрос. Каким образом происходит проверка «Если n = 0»? Я нигде этой проверки не вижу. Имеется в виду, что в такой записи вначале проверяется левый аргумент уравнения? Видимо левый 0 сравнивается с n, но где указано что 0 надо сравнивать с n? Если левый аргумент уравнения (0) совпадает с проверяемым значением (n), то проверяемому значению присваивается правый аргумент (1)? Но если так, то в чем смысл во втором уравнении сравнивать n с n?

Третий вопрос - если уравнения просматриватся по порядку, то этот алгоритм будет считать факториал от 1, несмотря на то, что ранее алгоритм уже определил что входное значение 0 и выходное будет 1. Правильно?

xintrea
()
Ответ на: комментарий от kristall

> А в целом Хаскелл не нужен.

Сколько людей на земле скажут, что им нужен Хаскелл, а сколько людей на земле — что им нужен ты? Прикинь и сделай вывод.

pitekantrop ★★★
()
Ответ на: комментарий от Toll

> Не-не-не, не с той же легкостью. Читаю мануалы на англицком и матюкаюсь каждый раз. Ну не люблю я языки с детства, включая русский. Но, русский сам выучился, а английкий еще учить надо.

Тогда единственное, что тебе подходит — это 1С.

pitekantrop ★★★
()

Какой-то нечеловеческий язык, однако. Ну хорошо, функции и рекурсия, для математики полезно (хотя и на С реализуется ничуть не сложнее).
Теория, опять же забавная.

А конкретные, практические задачи на нём решать можно? Очень математические, если уж на то пошло.

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

Как БПФ на этой штуке написать я примерно понял. Функции там и всё такое. А вот как сокет-то читать, да ещё чтобы только когда там данные появятся, а всё остальное время БПФ делать? А ещё желательно кольцевой буфер чтобы неравномерность входного потока упразднять. И на выходе тоже буфер, на случай торможения выходного потока. Вот как всё кроме математики сделать - я что-то так и не понял. Я даже не спрашиваю о том, чтобы какой-нибудь TCP_KEEPALIVE на сокете выставить, семафорить другим нитям и про прочие полезные для конкретного применения штуки. Просто расскажите как на этом Haskell'е сокет поллить и данные буферизовать, чтоб уж было чего функционально и математически обрабатывать?

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

Что толку от этой функциональности, если её практически-то никак применить не получается?

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

>Просто расскажите как на этом Haskell'е сокет поллить и данные буферизовать, чтоб уж было чего функционально и математически обрабатывать?

Ну я бы тут подключил внешнюю библиотеку для управления сокетами(а скорее просто установил нужный модуль(с сетями на хаскеле дела не имел)).

Всё должно решатся просто. На XSLT ведь матрасчёты не делаются(я не про учасников спецолиппиад).

SV0L0CH
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.