Pull to refresh
  • by relevance
  • by date
  • by rating

Открыта регистрация участников на Международную конференцию по функциональному программированию

Lisp *Erlang/OTP *Haskell *Functional Programming *Conferences


ICFP 2020 — двадцать пятая конференция под эгидой ACM SIGPLAN. В этом году конференция будет проводиться онлайн, и все события, проходящие в её рамках, будут онлайн.


Соревнование ICFP по программированию будет проводиться с 17 июля по 20 июля 2020 года (то есть, уже через два дня).


Сама конференция будет проходить с 24 по 26 августа 2020, и укладываться в два тайм-слота. Первый слот будет проходить с 9:00 до 17:30 по времени Нью-Йорка, и будет включать как технические, так и социальные мероприятия. Второй тайм-слот будет проходить с 9:00 до 17:30 по Пекинскому времени, на следующий день, и будет с незначительными вариациями повторять содержимое предыдущего дня, включая технические и социальные мероприятия.

Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Views 976
Comments 2

Про ФП #2

Lumber room
Было время, когда функциональные языки котировались если не больше, то наравне с императивными. Время прошло и даже известно почему. Почему-то считается, что программирование на функциональном языке это «взрыв мозга». Не спорю, иногда действительно взрыв, но это буквально дружеский хлопок по ушам, по сравнению с взрывами мозга, которые мне периодически приходится испытывать разбираясь в чужих исходниках на C#. Я очень хочу, что бы история была спиралевидной (-:
Читать дальше →
Total votes 10: ↑5 and ↓5 0
Views 614
Comments 14

В Visual Studio появится язык F#

Lumber room
Microsoft планирует внедрить поддержку функционального языка программирования F# (произносится как “F sharp”) в среду разработки Visual Studio. Об этом сообщил вице-президент подразделения Microsoft Developer Division в своём блоге. Это пока неофициальная информация, и никаких сроков не объявлено, но всё к тому идёт.

Язык F# основан на принципах функционального программирования, то есть в нём процесс вычисления трактуется как вычисление значений функций в математическом понимании. Это отличается от парадигмы императивного программирования, в которой процесс вычисления описывается в виде последовательности инструкций, похожих на приказы, изменяющих состояние программы. Кроме F#, в список функциональных языков входят Лисп, Miranda, Haskell, ML и другие.

Тексты программ на F# похожи на алгебру, они отлично подходят для описания математических функций, что требуется в разработке финансовых, научных, технических и других приложений. Язык F# поддерживает интерактивные скрипты, такие как Python, умеет работать с библиотеками .Net и средствами баз данных.
Читать дальше →
Total votes 21: ↑19 and ↓2 +17
Views 367
Comments 47

defun.ru: Digg для психов

Lumber room

Ну раз никто не до сих пор не сказал, скажу я.
Не далее чем в пятницу мы с lrrr официально открыли λ-версию Гламурного, Вебдванольного (хе-хе) сервиса defun.ru.
Сервис предназначен для коллекционирования ссылок про декларативное, функциональное и другое неземное программирование.
Подробнее у меня и у lrrr в блогах.
Надеюсь вам будет интересно.
Total votes 14: ↑14 and ↓0 +14
Views 225
Comments 21

Болезнь, Nemerle

Programming *
imageNemerle — язык под .NET, который поддерживает три парадигмы программирования: та, которую большинство программистов считает за ООП парадигму, функциональную парадигму (алгебраические типы данных, pattern-matching) и метапрограммирование (АОП, квазицитирование, расширение синтаксиса самого nemerle через макросы a-la lisp ). Все это положено на рельсы строгой статической типизации и приправлено мощной системой вывода типов.

Читать далее...
Total votes 57: ↑51 and ↓6 +45
Views 7.6K
Comments 49

Почему циклы должны умереть

Lumber room
Всем привет,

Прочитав недавнее обсуждение по поводу PHP, обнаружилось, что много людей боятся рекурсии как огня. Таковой миф нужно разоблачить!

Сегодня мы обоснуем, почему циклы это плохо, и почему их надо замочеть. В процессе мы будем пейсать на православном языке Хаскель, который очень непонятен. Вас предупредили!

Читать дальше →
Total votes 103: ↑55 and ↓48 +7
Views 1.3K
Comments 209

Оптимизация хвостовой рекурсии в .NET и Nemerle

Programming *
Недавно chiaroscuro написал провокационную статью с жёлтым заголовком «Почему циклы должны умереть». Её обсуждение заняло около 180 комментариев, но сама статья ушла в минус и не попала на главную, не смотря на то, что она содержала здравую мысль об использовании рекурсии вместо циклов.

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

Я соглашаюсь с тем, что данная статья распространяется на условиях CC-NC-BY
Total votes 40: ↑30 and ↓10 +20
Views 5.1K
Comments 103

F#: Hello, World

.NET *F# *
Приблизительно через год нас ждет очередной релиз Microsoft Visual Studio и едва ли не самой вкусной новинкой обещает стать F# — функциональный язык глазами ребят из Кембриджской лаборатории Microsoft Research. Этот язык совсем новый и сейчас находится на стадии вылизывания в лабораториях Microsoft Research. Microsoft позиционирует F# как один из основных языков для .Net наряду с C# и VB.Net что скорее всего значит, что рано или поздно с ним придется столкнутся очень многим програмистам под .Net. Я, как и многие разработчики, никогда не сталкивался с чисто функциональными языками, но принцип «Готовь сани летом» еще не отменяли. Эта статья — мой личный маленький «Привет F#».
Почитать про Hello World на F#
Total votes 56: ↑40 and ↓16 +24
Views 6.4K
Comments 77

Функциональное программирование для землян — функции

Python *


В статье про Python пользователь Xronos попросил рассказать о функциональном программировании (ФП). Поскольку я одно время довольно плотно занимался с Lisp, я хотел бы немножко рассказать об этом. Сразу хочу сказать, что о чистом ФП речь не идет. Я расскажу о более простых и более применимых приемах на примере языка Python.

Читать дальше →
Total votes 67: ↑67 and ↓0 +67
Views 8.2K
Comments 26

1. Metaprogramming patterns — 25кю. Метод eval

Ruby *
Программирование, которым я периодически по-прежнему занимаюсь, постепенно меняет свой стиль и всё больше связано с метапрограммированием. При этом нельзя сказать, что обычное программирование мне опостылело. Просто как любой программист, я ищу пути для всё большей модульности, краткости, внятности и гибкости кода, и в метапрограммировании мне видится нераскрытый потенциал (несмотря на давний необозримый интернетовский флуд по метапрограммированию идущий ещё от Lisp). :)

Хочу начать вести блог, посвященный метапрограммированию на Ruby.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 19K
Comments 12

Функциональное программирование для землян — списки

Python *
Продолжаю свое небольшое введение в функциональное программирование. На этот раз речь пойдет о списках и методах их обработки в функциональном стиле.

Читать дальше →
Total votes 53: ↑52 and ↓1 +51
Views 8.7K
Comments 42

2. Metaprogramming patterns — 22кю. Reuse в малом — bang!

Ruby *
На этот раз буду рассказывать не только про метапрограммирование, но и про Ruby, а также про алгоритмы — сегодня вспомним классику и посмотрим, как она нам явится в Ruby-строках реализации метода qsort. Блог только начинается, про настоящее метапрограммирование пока говорить рано, поэтому позволю себе отступления от основной темы.
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Views 2.8K
Comments 3

континуации и stateful веб-программирование (Updated!)

Website development *
Идея совсем не нова. Идея древна.
Однако большинство наблюдаемых вокруг веб-фреймворков упорно игнорируют эту идею.

Она заключается в том, чтобы использовать континуации (continuations) для магического превращения RESTful (stateless) веб-приложений в более удобный и привычный stateful формат.
Читать дальше →
Total votes 44: ↑37 and ↓7 +30
Views 2.3K
Comments 95

Prett Parsing — метод Вогана Пратта для разбора выражений

Algorithms *
В тему компиляций и вычислений выражений.

В далёком 1973 году Воган Прэтт (Vaughan Pratt) предложил простой и эффективный метод разбора выражений, не использующий ни автоматы, ни грамматику как таковую.

Идея заключается в том, что каждый символ (token) наделяется свойствами:
lbp = приоритет связывания символа слева,
nud = функция, определяющая результат применения оператора в начале выражения,
led = функция, определяющая результат применения в середине выражения.

Основной разбор осуществляется по схеме:
разбор(приоритет продолжения):
    вытолкнуть символ из входного потока
    результат = вызов nud этого символа
    пока приоритет lbp следующего в потоке символа > приоритета продолжения:
        вытолкнуть символ из входного потока
        результат = применени led этого символа к текущему результату

Константы и переменные имеют приоритет связывания 0, а функция nud возвращает их значение (или ссылку). Поэтому применение разбора к константам сразу возратит их значение.
Для бинарных операторов функция led рекурсивно вызывает продолжение разбора (справа) вплоть до более низкого приоритета, и делает что-нибудь с уже накопленым (слева) результатом, и полученным рекурсивно.
Результат применения оператора аггрегируется для внешнего вызова.
Много-арные операторы — получают аргументы дополнительным вызовом функции разбора.
Префиксные операторы делаются с помощью определения для них функции nud.
Для правостороннего связывания меняется приоритет продолжения рекурсивного разбора.

На сайте effbot.org приводится подробная реализация на питоне.
Там же есть ссылки для жаваскрипта и схемы.
наглядный пример на питоне
Total votes 38: ↑36 and ↓2 +34
Views 4.7K
Comments 15

Рекурсия с помощью Y–комбинатора

Python *
Поводом для написания этой статьи стало желание разобраться с тем, как работает Y-комбинатор.

Чтобы мозги не ржавели и работали как часы, я стараюсь пробовать новые и необычные вещи.
Интереса ради, я скомпилировал Lua 5.x под DOS, с этим никаких проблем не было, но при проверке Lua на её стандартных тестах, я обнаружил код вычисления факториала, работу которого я не понял.
Но ясно осознал, что это нечто относится к функциональному программированию.

Читать дальше →
Total votes 36: ↑35 and ↓1 +34
Views 7.7K
Comments 38

3. Metaprogramming patterns — 20 кю. Замыкания

Ruby *
В предыдущем посте мы затронули важнейшую концепцию — замыкание (closure).
Суть этой концепции в том, что в любой блок как бы заключается «весь окружающий мир» так, как он виден в контексте, где блок создается. Правильнее сказать, что в блок заключается не весь окружающий мир (пространство имён), а фиксируется точка зрения на окружающий мир (пространство имён).
Читать дальше →
Total votes 32: ↑27 and ↓5 +22
Views 5K
Comments 8

4. Metaprogramming patterns. 19 кю. Спасение утопающих дело рук самих утопающих

Ruby *
Предположим, что у вас есть библиотечный метод, который иногда кидает ексепшены.
Этот метод библиотечный в том смысле, что вы не хотите трогать руками тот файл, где он определён, так как этот файл, например, относится к библиотеке, которая регулярно обновляется, и ваши изменения после каждого обновления будут теряться, если вы специально не позаботитесь о их сохранении.
Такие методы принято менять в своем собственном коде — в динамических языках можно прямо в своем коде переписать избранный метод избранного класса.
Читать дальше →
Total votes 26: ↑23 and ↓3 +20
Views 2.5K
Comments 7