alexey_rom: (Default)
В Яндексе используют Эрланг, оказывается. Вот вакансия: http://habrahabr.ru/job/3829/ Чем больше, тем лучше.
alexey_rom: (Default)
Для одного проекта понадобилась библиотека для работы с SQLite 3 из Erlang. Она на GitHub нашлась (автор [livejournal.com profile] levgem), но пришлось несколько расширить. Так что вот моя ветка. Главные добавления:

1. Поддержка Windows.
2. Параметризованные и подготовленные запросы.
3. Правильная работа с целыми числами, не вмещающимися в 32 бита.

Конечно, нужно ещё добавить тестов...
alexey_rom: (Default)
Официальное объявление. Теперь нужно смотреть, достаточно ли там всё просто, чтобы просить студентов писать на нём тесты...

UPDATE: А только что объявили об очередной вариации на тему: http://github.com/manopapad/proper Кроме того, уже некоторое время назад появился http://github.com/krestenkrab/triq от автора Erjang (реализации Erlang на JVM).
alexey_rom: (Default)
Возник такой вопрос. Как устроены cons-списки, большей части читающих известно :) А мне сейчас пригодилось бы неизменяемое представление списков в неленивом функциональном языке с хвостовой рекурсией, которое хорошо поддерживает две операции:
1) Конкатенацию (и как частный случай добавление элементов в начало и конец списка). Желательно хотя бы амортизированное O(1), O(log N) тоже сойдёт.
2) Итерацию от начала к концу. Без переполнения стека, независимо от того, как строился список.

Вот из-за второго условия простые conc-списки меня не устраивают, нужно какое-то балансирование. И чем проще, тем лучше.

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

Известные мне варианты:
1) Vector в Clojure и Scala. Хорошо добавляет элементы в конец, плохо в начало.
2) 2-3 finger tree (например, Data.Sequence в Haskell). Сложная схема балансирования и, как результат, великоваты постоянные множители у асимптотик (хотя жить можно).

UPDATE: Simple Confluently Persistent Catenable Lists и Purely Functional, Real-Time Deques with Catenation.
alexey_rom: (Default)
David R. MacIver проводит большой опрос насчёт того, какой язык лучше для каких целей. Думаю, найдутся те, кому будет интересно поучаствовать.

UPDATE: В общем, людям не понравилось. Но тем не менее, ответов набралось достаточно много, и результаты уже можно посмотреть.
alexey_rom: (Default)
И последняя по части ФП, со следующей недели начинается Prolog. Текст очень короткий, только по list comprehensions, поскольку про типы я рассказывал на лекции.

Разработка
Задание на лабораторную
streams.erl
diff_list.erl
alexey_rom: (Default)
Почти год назад автор BitC закончил работу над проектом и ушёл работать в Microsoft. Недавно он сообщил, что уходит из MS и возвращается к BitC. (Вместо упомянутого в сообщении CLR он сейчас планирует перейти на LLVM.)
alexey_rom: (Default)
Цитата из Masterminds of Programming:
Python probably has the reputation of supporting functional programming based on the inclusion of lambda, map, filter and reduce in the language, but in my eyes these are just syntactic sugar, and not the fundamental building blocks that they are in functional languages. The more fundamental property that Python shares with Lisp (not a functional language either!) is that functions are first-class objects, and can be passed around like any other object. This, combined with nested scopes and a generally Lisp-like approach to function state, makes it possible to easily implement concepts that superficially resemble concepts from functional languages, like currying, map, and reduce. The primitive operators that are necessary to implement those concepts are built into Python, where in functional languages, those concepts are the primitive operations. You can write reduce() in a few lines of Python. Not so in a functional language.

Перевод:
Считается, что Python поддерживает функциональное программирование, скорее всего из-за включения lambda, map, filter и reduce в язык. Но с моей точки зрения это просто синтаксический сахар, а не основные строительные блоки, которыми они являются в функциональных языках. Куда более фундаментальным свойством, общим для Python и Lisp (который тоже не функциональный язык!), является то, что функции — объекты первого класса, и могут передаваться так же, как и любой другой объект. Это, в сочетании с вложенными областями видимости и в общем близким к Lisp'у подходом к состоянию функций, позволяет легко реализовать возможности, поверхностно напоминающие о таких возможностях функциональных языков, как карринг, map, и reduce. В Python встроены примитивные конструкции, необходимые для реализации этих понятий; а вот в функциональных языках они сами и являются примитивными конструкциями. В Python достаточно нескольких строк, чтобы написать reduce(). В функциональных языках это не так.
alexey_rom: (Default)
Ссылка с более подробным описанием

Материалы

Coverage
- Parsing and interpretation in Prolog
- Basics of small-step and big-step semantics
- Basics of untyped and typed lambda calculi
- Introduction to Haskell
- Basics of denotational semantics
- Denotational semantics in Haskell
- Basics of static program analysis
- Static program analysis in Haskell
- OO programming in Haskell
- The Expression Problem
- Basics of Constraint-Logic Programming
- Basics of Process Algebra (CCS)
- ... a few more specialized lectures

Characteristics
- English as the course language
- Slides, videos, exercises available online publicly
- 42 hours (45mins each) of lectures over 4 months
- 12 programming-oriented, interactive labs
- Transparent scheme for midterm and final exam
- Heavy reuse of material from other courses
- Use of Twitter for notification and aggregation
alexey_rom: (Default)
Guy Steele про параллелизацию функциональных программ: слайды (в pdf), видео
alexey_rom: (Default)
Уже третий год в весеннем семестре я веду курс "Функциональное и логическое программирование" у двух групп. У нас будет 7 лекций и 7 лабораторных (по две пары). (В одной группе, возможно, 6).

Выбор языков:
По ЛП, понятно, Пролог. По ФП Эрланг ради простоты и синтаксической близости с Прологом.

Мои планы:
3 занятия по ФП, 4 по ЛП

Лекция 1. Преимущества неизменяемых данных, списки в ФП, хвостовая vs нехвостовая рекурсия
Лабораторная 1. Знакомство с Эрлангом, написание первых функций.
Лекция 2. Функции как значения. Напомнить лямбда-исчисление. Замыкания. Сравнить с указателями на функции в C и поговорить о ситуации в других языках.
Лабораторная 2. ФВП. Применение для работы со списками и как управляющих конструкций.
Лекция 3. Алгебраические типы данных. Если успею -- немного о выводе типов. Ленивость.
Лабораторная 3. List comprehensions. Представление сложных данных. Пример: деревья.

По ЛП куда меньше теории, которая не связана непосредственно с Прологом.

Лекция 4. Идея логического программирования. Синтаксис Пролога.
Лабораторная 4. Знакомство с Прологом. Простая БД. Написание правил и запросов.
Лекция 5. Арифметика. Операторы.
Лабораторная 5. Работа со списками. Представление сложных данных. Деревья.
Лекция и лабораторная 6. Алгоритм унификации и поиска с откатом. Порядок клозов в правилах. Сечения (зелёные и красные). Отрицание.
Если успеваю: Работа со свободными переменными. Разностные списки.
Лекция и лабораторная 7. Грамматики (DCG). Код как данные.

Ваше мнение? Есть ли что-то, о чём обязательно нужно рассказать, а у меня этого нет? Есть ли что-то явно лишнее?

Кроме того, выложил на Dropbox материал и задание к первой лабораторной. Может быть, кому-нибудь будет интересно. Те же вопросы, что по общему плану занятий.
alexey_rom: (Default)
Один из авторов проекта UHC написал книгу, описывающую их реализацию.
alexey_rom: (Default)
Это инструмент для автоматического рефакторинга кода на Erlang. Статьи меня сильно заинтересовали, а тут ещё оказалось, что авторы сделали бесплатный веб-интерфейс. Правда, он сохраняет код и применённые преобразования — не нравится, не пользуйтесь или покупайте лицензию.
alexey_rom: (Default)
Bart de Smet пишет о новой Reactive Framework, которая войдёт в .NET 4.0 (очень интересная и полезная библиотека, кстати; и многие идеи взяты опять-таки из ФП, а точнее из Functional Reactive Programming).

В своём последнем посте он упомянул комбинатор Using, служащий для выделения ресурса и его освобождения после завершения работы с последовательностью. ... )
alexey_rom: (Default)
Не помню, у кого из френдов была ссылка, но введение действительно неплохое:

Introduction to Type Theory
alexey_rom: (Default)
Видео и транскрипт на InfoQ (вот как можно сделать такой неудобный видеоплеер на Flash, когда давно есть YouTube -- я не понимаю!)

Транскрипт на Google Docs (via [livejournal.com profile] avva)

Profile

alexey_rom: (Default)
alexey_rom

April 2012

S M T W T F S
1 234567
89 1011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 24th, 2017 12:52 pm
Powered by Dreamwidth Studios