Как стать автором
Обновить
10.53

Функциональное программирование *

От Lisp до Haskell

Сначала показывать
Порог рейтинга
Уровень сложности

Связные списки в функциональном стиле

Время на прочтение2 мин
Количество просмотров20K
Рассмотрим вариант реализации связных списков через замыкания.

Для обозначения списков будем использовать нотацию, похожую на Haskell: x:xs, где x — начало списка (head), xs — продолжение (tail).



В качестве языка реализации я выбрал JavaScript.

Конструируем список

Читать дальше →

Не ещё одна статья о функциональном программировании

Время на прочтение6 мин
Количество просмотров19K
Вот уже несколько лет функциональное программирование набирает популярность. Это, конечно, не значит, что люди забрасывают свои старые языки и ООП и массово переходят на Haskell, Lisp или Erlang. Нет. Функциональная парадигма проникает в наш код через лазейки мультипарадигменных языков, а вышеупомянутые языки чаще служат флагами в этом наступлении, чем используются непосредственно.

Я собирался продолжить в том же духе и во второй части статьи представить свою библиотеку, добавляющую пару функциональных трюков в python, но потом понял, что фокус моей библиотеки не на функциональном программировании, а на практичности. На этом я и сосредоточюсь, приведу несколько жизненных примеров полезности funcy.
Читать дальше →

Вычисление рекуррентных соотношений на Perl

Время на прочтение3 мин
Количество просмотров4.7K
Привет,
в этом посте я расскажу рецепт добавления функциональности в Перл.

Как уже стало понятно из названия, мы будем вычислять рекуррентные соотношения.
Например, формулы для вычисления факториала выглядят вот так:
f(0) = 1
f(n) = n * f(n-1)


Функциональные языки программирования позволяют определять такие функции достаточно просто, в Erlang это делается следующим образом:
factorial(0) ->
    1;
factorial(N) ->
    N * factorial(N-1).


А теперь попробуем сделать нечто похожее, что позволяло бы нам писать код вида:
#!/usr/bin/perl -I./lib
use strict;
use bigint;
 
use Recurrent;
 
recurrent fac => {
    arg(0) => lambda { my($n) = @_; return 1 },
    arg(n) => lambda { my($n) = @_; return $n * fac($n-1) },
};
 
print fac(100);

Из примера видно, что у нас появились новые функции recurrent, arg, n и lambda. На самом деле, практическая польза есть только у recurrent, все остальные нужны лишь для получения более «красивого» кода.

Давайте напишем модуль Recurrent.pm
Читать дальше →

Переход с Java на Scala (Clojure, Haskell, Erlang ..) как повышение абстракции программирования

Время на прочтение3 мин
Количество просмотров33K
А что такого можно написать на Scala, чего нельзя на Java?
(из разговора с одним моим знакомым другом, человеком и программистом)
The best reason to learn a new programming language is to learn to think differently.
Chad Fowler

Хочу рассказать не о простоте конструкций Scala по сравнению с Java и не о том, что в 1 строчку Scala я могу уместить 20 строк Java. А наоборот, копнуть поглубже, уронить устои ООП и посмотреть на реакцию благородной публики.
Читать дальше →

Анонс школы функционального программирования в рамках DevCon 2013

Время на прочтение3 мин
Количество просмотров6.7K
image

Уважаемые разработчики и специалисты по разработке ПО! От лица команды конференции DevCon 2013 я с удовольствием анонсирую в рамках конференции проведение “Школы функционального программирования”.

Не знакомы с функциональным программированием, но всегда хотели набраться знаний? Знакомы, но хотите углубить знания? Знаете хорошо и вам интересен хардкор? Для всех для вас на конференции пройдет школа функционального программирования, в рамках которой, лучшие эксперты страны прочитают ряд лекций по функциональному программированию от самых азов до глубоких методов и приемов.

Цель школы


Познакомить участников конференции с парадигмой функционального программирования и языками функционального программирования (F#, Haskell и другие), показать удобство применения языков ФП для решения практических задач в области параллельного, асинхронного, облачного и веб-программирования и работы с большими объемами распределенных данных.

В рамках Школы функционального программирования участники конференции смогут:

  • Познакомиться с парадигмой функционального программирования и понять, как можно программировать «по другому», без переменных, оператора присваивания и побочных эффектов
  • Оценить преимущества языков программирования (F#, Haskell и других) для решения задач параллельного, асинхронного, облачного и веб-программирования и для обработки больших распределенных данных
  • Поговорить о развитой системе типизации в функциональных языках и об использовании функционального подхода в программировании на C#

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

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

Решение турнирных задач на языке Haskell

Время на прочтение3 мин
Количество просмотров9.2K
Доброго времени суток всем хабражителям
Перед вами статья, посвященная довольно известному, но не сильно популярному языку Haskell. В ней мне хочется показать пример решения простой турнирной задачи на языке Haskell. Надеюсь, что эта статья поможет начинающим программистам на Хаскеле сделать первые шаги к написанию полноценной программы.

Читать дальше →

Играем в Haskell

Время на прочтение10 мин
Количество просмотров61K


Я замечательно провел время изучая Haskell в последние месяцы, и мне кажется, что сделать первые шаги в этом занятии сложнее, чем это могло бы быть на самом деле. Мне повезло работать в нужное время и в нужном месте, и в Facebook я прошел курс по Haskell от Bryan O'Sullivan, но Вы определенно сможете влиться в тему и без чужой помощи. Для этого можно поиграть в Haskell на сайте Try Haskell, а в конечном счете установить себе GHC.
Читать дальше →

Clojure в Белорусском ГУ

Время на прочтение5 мин
Количество просмотров12K
БГУ лого
Clojure logo
В этом семестре (осенью 2012) был проведён факультатив по языку Clojure в Белорусском ГУ. В посте будет описан факультатив: причины, программа, задания, результаты, впечатления.
Читать дальше →

Неофициальный путеводитель по мозгу Рича Хики

Время на прочтение5 мин
Количество просмотров29K
Блог Flying Machine Studios
6 декабря 2012 года
перевод статьи The Unofficial Guide to Rich Hickey's Brain



Частично, мое удовольствие от изучения Clojure возникло благодаря знакомству с мыслями Рича Хики о программировании. У Рича есть свой взгляд на фундаментальные концепции программирования, ясный и последовательный, и я думаю, что каждый программист смог бы выиграть, используя его. Каждый раз, когда я смотрю одно из его выступлений, у меня складывается ощущение, что кто-то взял и привел мой ум в порядок.

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

Весь последующий текст основан на выступлении Рича Хики «Are we there yet?»
Читать дальше →

Встреча FProg 2012-12 в Петербурге

Время на прочтение1 мин
Количество просмотров2.3K

12 декабря 2012 года в 19:00 в петербургском офисе JetBrains пройдёт встреча по функциональному программированию FProg. В программе встречи представлены доклады о языках Haskell и Kotlin:

  • Илья Сергей. Статический анализ и оптимизация кода в GHC (видео)
  • Андрей Бреслав. Функции и данные в Kotlin (видео)


Читать дальше →

Абстрагирование потока управления

Время на прочтение4 мин
Количество просмотров15K
Любой программист, даже если не смотрит на свою работу в таком ключе, постоянно занимается построением абстракций. Чаще всего мы абстрагируем вычисления (пишем функции) или поведение (процедуры и классы), но кроме этих двух случаев в нашей работе возникает множество повторяющихся шаблонов особенно при обработке ошибок, управлении ресурсами, написании стандартных обработчиков и оптимизаций.

Что значит абстрагирование потока управления или «control flow», как выражаются наши заморские друзья? В случае, когда никто не выпендривается, потоком занимаются управляющие конструкции. Иногда этих управляющих конструкций недостаточно и мы дописываем свои, абстрагирующие нужное нам поведение программы. Это просто в языках вроде lisp, ruby или perl, но и в других языках это возможно, например, с помощью функций высшего порядка.
Читать дальше →
12 ...
44