Читая М. Липовача «Изучай Haskell во имя добра!», я поначалу не понимал, чем частичное применение отличается от каррирования. Потратил некоторое время на разбор данного вопроса и набросал себе «шпаргалку» по обозначенной теме.
Читать полностью »
Рубрика «функциональное программирование» - 38
Немного о каррировании в Haskell
2015-01-29 в 15:08, admin, рубрики: haskell, каррирование, функциональное программированиеКатегории Клейсли
2015-01-28 в 14:12, admin, рубрики: c++, haskell, математика, Программирование, теория категорий, функциональное программированиеКомпозиция логирования
Вы видели, как сделать категорию типов и чистых функций. Я также упомянул, что есть способ смоделировать побочные эффекты, или нечистые функции, в рамках теории категорий. Давайте рассмотрим пример: функции, которые логируют или записывают ход своего выполнения.
Читать полностью »
Письмо Дейкстры: почему обучение программированию нужно начинать с функционального языка
2015-01-27 в 7:47, admin, рубрики: dijkstra, haskell, java, Блог компании «Hexlet», образование, обучение, Программирование, университет, функциональное программирование
Недавний перевод статьи «Пора заменить Python как язык для обучения» спровоцировал большую дискуссию. Очевидно, что программисты считают эту тему очень важной. К сожалению, большинство споров были об императивных языках, и мало кто предлагал функциональные языки в качестве инструмента обучения программированию.
Мы в Хекслете недавно запустили новую версию, ключевой особенностью которой стали практические упражнения по программированию в браузере. В связи с этим мы стали получать еще больше писем от начинающих программистов с вопросами вроде «с чего начать». С одной стороны, они хотят выложить бета-версию приложения в app store через неделю. С другой стороны, мы понимаем, что за такой короткий срок, наверное, можно научиться кодить приложения, но нельзя научиться программировать. И сложно решить, что лучше: как можно быстрее научить созданию простых приложений без реального понимания программирования, алгоритмов и их вычислительной сложности, а потом начать знакомство с этими важными темами, или начать «с начала», и органично придти к созданию приложений и продуктов после освоения фундамента.
В 2001 году, Эдсгер Дейкстра написал письмо экономическому совету университета Техаса. В нем знаменитый ученый призывает членов совета задуматься о смене языка программирования для вводного курса. К сожалению, язык был заменен на Java. Примерно в то же время MIT сменили язык курса «Структура и интерпретация компьютерных программ» с функционального Scheme (диалекта LISP) на Python.
Сегодня мы публикуем перевод этого письма.
Членам Экономического Совета
Я пишу вам по поводу слуха о замене языка во вводном курсе по программированию с функционального языка Haskell на императивный язык Java. Я считаю, что Совет должен взять на себя ответственность, чтобы решение не было принято на неправильном уровне.
Читать полностью »
В общем случае, имена в Haskell могут состоять из буквенно-цифровых символов. Кроме того, допускается в имени использовать символ ', а символ _ считается буквой. Первый символ в имени не может быть цифрой. Имена функций и операторов обязательно должны начинаться со строчной буквы, а имена типов данных, конструкторов данных и классов типов — с прописной. Кроме того, в ряде случаев имена могут состоять из символов набора ascSymbol. В данной заметке даётся некоторая информация об использовании символов этого набора.
Читать полностью »
Вычисление факториала на числах Чёрча
2015-01-20 в 10:39, admin, рубрики: javascript, КодоБред, ненормальное программирование, функциональное программирование, числа чёрчаДоброго дня, друзья!
Тема функционального программирования раскрыта на Хабре весьма неплохо, есть целая куча статей посвященных λ-исчислению, числам Чёрча и подобным темам, так что ничего нового я не открою, зато мы напишем одну бесполезную и крайне неэффективную программу.
Для того, чтоб жизнь мёдом не казалась, ограничим себя небольшим подмножеством языка JavaScript, а именно, будем использовать только анонимные функции от одного аргумента. Больше нам ничего не потребуется (ну почти :)).
Начнем с определения факториала, и посмотрим, что нам понадобится в процессе решения задачи:
var fact = function (n) {
if (n === 0) return 1;
return n * fact(n - 1);
};
Итак, нам потребуются функции, логические значения (для результата операции сравнения с нулем), условный оператор, операции умножения и вычитания единицы, кроме того нужно будет реализовать рекурсивный вызов функции.
Готовы?
Читать полностью »
Категории, большие и малые
2015-01-19 в 13:29, admin, рубрики: c++, haskell, математика, Программирование, теория категорий, функциональное программированиеЭто четвертая статья в цикле «Теория категорий для программистов».
Понять пользу категорий можно изучая различные примеры. Категории бывают всех форм и размеров и часто появляются в самых неожиданных местах. Мы начнем с самых простых.
Без объектов
Самая простая категория — без объектов и, как следствие, без морфизмов. Читать полностью »
Clojure — трансдьюсеры, редьюсеры и прочая муть
2015-01-19 в 4:28, admin, рубрики: clojure, fold, lazy collections, reduce, reducers, transducers, муть всякая, Программирование, редьюсеры, трансдьюсеры, функциональное программированиеВ последнее время определенную известность получили transducers — новая фишка из еще не вышедшей Clojure 1.7. На момент написания статьи актуальна Сlojure 1.7-alpha5, но уже успело появиться изрядное количество портов трансдьюсеров на разнообразные языки: Python, Ruby, JavaScript, PHP, Java, C++, Lua, Erlang. И… это, по правде говоря, немного обескураживает. Ведь довольно давно (еще в Clojure 1.5) добавили библиотеку reducers. Так вот про редьюсеры никто особо не говорил, никуда ничего не портировал, хотя, вроде как, делают они схожие вещи… Или нет?
Давайте разберемся, для чего нам в Clojure понадобились все эти reducers & transducers (они нам правда нужны?), как они работают, как их использовать… И выясним наконец, не пора ли выкидывать reducers на свалку.Читать полностью »
Типы и функции
2015-01-13 в 8:51, admin, рубрики: c++, haskell, математика, Программирование, теория категорий, функциональное программированиеЭто третья статья в цикле «Теория категорий для программистов».
Категория типов и функций играет важную роль в программировании, так что давайте поговорим о том, что такое типы, и зачем они нам нужны.
Кому нужны типы?
В сообществе есть некоторое несогласие о преимуществах статической типизации против динамической и сильной типизации против слабой. Позвольте мне проиллюстрировать выбор типизации с помощью мысленного эксперимента. Представьте себе миллионы обезьян с клавиатурами, радостно жмущих случайные клавиши, которые пишут, компилируют и запускают программы.
Святая Троица
2015-01-04 в 10:41, admin, рубрики: логика, математика, соответствие Карри-Ховарда, теория категорий, теория типов, функциональное программированиеХристианское учение о Троице — это представление о едином Боге, выступающем в ипостасях Бога-Отца, Бога-Сына и Святого Духа. Доктрина вычислительного тринитаризма состоит в том, что вычисление представляется в трех формах: доказательствах высказываний, программах некоторого типа и отображений между структурами. Каждый из этих аспектов есть объект поклонения одной из трех деноминаций: логики, утверждающей главенство доказательств и высказываний, теории языков программирования, обращающейся в первую очередь к программам и типам, и теории категорий, отдающей первенство отображениям и структурам. Основной догмат вычислительного тринитаризма гласит, что логики, языки программирования и категории — всего лишь манифестации единого божественного понятия вычисления. Не существует наилучшего пути к просветлению, каждый из аспектов даёт возможность понимания того, что в нашей жизни представляет собой опыт вычисления.
Функциональное программирование в Swift. Начало
2014-12-30 в 15:58, admin, рубрики: ios программирование, iOS разработка, mobile development, swift, Программирование, разработка под iOS, функциональное программирование
Предисловие переводчика.
Отмечая окончание 2014 года, известная Swift группа SLUG из Сан-Франциско выбрала 5 наиболее популярных Swift видео за 2014 с организованных ею встреч. И среди них оказалось выступление Chris Eidhof «Функциональное программирование в Swift».
Сейчас Chris Eidhof — известная личность в Swift сообществе, он — автор недавно вышедшей книги «Functional programming in Swift», один из создателей журнала objc.io, организатор конференции «Functional Swift Conference», прошедшей 6-го декабря в Бруклине и будущей конференции UIKonf.
Но я открыла его, когда он, один из первых, опубликовал очень простую элегантную статью об эффективности функционального подхода в Swift к JSON парсингу.
В этой статье нет недоступных для понимания концепций, никаких мистических математических «химер» типа «Монада, Функтор, Аппликативный функтор», на которых Haskell программисты клянутся перед оставшимся миром, закатывая глаза.
Там нет и таких нововведений Swift, как дженерики (generics) и «вывод типа» (type inference).
Если вы хотите плавно «въехать» в функциональное программирование в Swift, то вы должны познакомиться с его статьей «Parsing JSON in Swift» и выступлением на SLUG «Functional Programming in Swift».
Читать полностью »