16 мая 2012
Haskell@Habrahabr
Решение арифметических задач — вероятностный подход против регулярных выражений
Как всегда в начале месяца состоялся конкурс по функциональному программированию, который проводится на ежемесячной основе под эгидой Фонда Поддержки Функционального Программирования. В мае на суд конкурсантов была предложена задача, которая планировалась в качестве задачи для Большого Ежегодного Конкурса по ФП, который пока так и не состоялся. Изначальная концепция задачи была переосмыслена, в результате чего появилась такая формулировка:В файле, находящемся по известному адресу, записано 100 тысяч условий арифметических задач на четыре действия: сложение, вычитание, умножение и деление. Условия записаны на естественном языке. В качестве результата необходимо представить файл с ответами на задачи — по одному ответу в виде натурального числа на каждой строке (итого 100 тысяч строк).
Читать дальше →
Erlanger.ru
Flymake + Rebar
Eric B. Merritt нашел способ связать Flymake и rebar. Как известно, стандартно установленный Flymake не работает с rebar'ом по той про стой причине, что он просто не знает, где находится код и пути к зависимостям.
Решение простое (детальное описание того, что делает этот код, можно посмотреть в блоге Эрика):
(defun ebm-find-rebar-top-recr (dirname)
(let* ((project-dir (locate-dominating-file dirname "rebar.config")))
(if project-dir
(let* ((parent-dir (file-name-directory (directory-file-name project-dir)))
(top-project-dir (if (and parent-dir (not (string= parent-dir "/")))
(ebm-find-rebar-top-recr parent-dir)
nil)))
(if top-project-dir
top-project-dir
project-dir))
project-dir)))
(defun ebm-find-rebar-top ()
(interactive)
(let* ((dirname (file-name-directory (buffer-file-name)))
(project-dir (ebm-find-rebar-top-recr dirname)))
(if project-dir
project-dir
(erlang-flymake-get-app-dir))))
(defun ebm-directory-dirs (dir name)
"Find all directories in DIR."
(unless (file-directory-p dir)
(error "Not a directory `%s'" dir))
(let ((dir (directory-file-name dir))
(dirs '())
(files (directory-files dir nil nil t)))
(dolist (file files)
(unless (member file '("." ".."))
(let ((absolute-path (expand-file-name (concat dir "/" file))))
(when (file-directory-p absolute-path)
(if (string= file name)
(setq dirs (append (cons absolute-path
(ebm-directory-dirs absolute-path name))
dirs))
(setq dirs (append
(ebm-directory-dirs absolute-path name)
dirs)))))))
dirs))
(defun ebm-get-deps-code-path-dirs ()
(ebm-directory-dirs (ebm-find-rebar-top) "ebin"))
(defun ebm-get-deps-include-dirs ()
(ebm-directory-dirs (ebm-find-rebar-top) "include"))
(fset 'erlang-flymake-get-code-path-dirs 'ebm-get-deps-code-path-dirs)
(fset 'erlang-flymake-get-include-dirs-function 'ebm-get-deps-include-dirs)darkus
Третий урок программирования для старшего сына

Как видите, это переложение на детский язык формализма машины Тьюринга. Игра называется «Умнейшая черепашка». Умнейшая потому, что она может решить любую задачу, которую только может решить компьютер. И ещё потому, что она может решить любую задачу любого компьютера, а некоторые компьютеры могут решать только очень специфические задачи.
Лирическое отступление: сын сразу же заявил: «Давай подключим её к Интернету, накачаем оттуда игр и поиграем».
Черепашка умеет ходить влево и вправо вдоль ленты, на которой может рисовать зачернённый кружок или стирать его. Конечно, она может читать, что там на ленте напротив неё нарисовано. И у черепашки есть флаги, как у древнего воина — прямо на спине. В любой момент времени у черепашки один и только один флаг на спине какого-либо цвета. Цветов может быть столько, сколько необходимо для определения поведения черепашки. В начале работы черепашка несёт на спине флаг белого цвета.
Сын сразу же понял формализм, после пары моих примеров написал программу сам. Я, конечно, помогал — мы обсуждали, что и как надо определять при помощи флагов различных цветов. Но самое главное, что понял сын, так это то, что мы не записываем последовательность шагов, которые должна выполнять черепашка, как мы это делали в случае с луноходом. Его поразило то, что мы описываем поведение при помощи условий, а черепашка сама смотрит, что и как необходимо делать в текущих условиях. И он вот сам мне объяснял, что мы можем записать какое-либо число в любом месте ленты, а черепашка сама до него дойдёт.
Сразу же рассказал про проблему останова. Объяснял самыми простейшими словами, даже доказал в стиле: «Пусть черепашка останавливается, когда исследуемая ею программа не останавливается, и не останавливается, если останавливается. Тогда дадим ей на вход ею саму же. Парадокс же». Сын кивал, делал умное лицо. А потом заявил, перевернув листок: «Погоди, давай я прямо сейчас напишу программу, которая определяет, останавливается ли черепашка или нет». Я его отговорил, хотя вот теперь думаю, что, может быть, зря?
Erlanger.ru
Монады для Erlang'а. Еще один подход к снаряду.
К сожалению, описание этого подхода существует только на китайском. Код можно взять на GutHub'е: https://github.com/edwardbadboy/Erlang_Monad.
С виду, эта библиотека позволяет достаточно многое и интересное. Примеры кода:
трансформируется в
Еще трансформации:
Библиотека реализует следующие монады: Maybe, State, List, Flex
15 мая 2012
Scala@Habrahabr
Scala-конференция в Петербурге через 4 дня

В программе конференции гостей ждет доклады о новых возможностях Scala 2.10, байткоде, создании эффективной и асинхронной системы, используя модель актеров и Akka2.0, а также новом языке Kotlin.
Регистрация и подробная информация о конференции по адресу: scaladev.ru.
thesz
В продолжение про встречу.
На всякий случай, мой телефон +7(916)605-97-88
blog : ∀a → ∀b → (a → b) → a → b
Agda2
Ковыряю Agda2module if where
open import proof
open import bool
open import list
if_then_else_ : ∀ {l} {a : Set l} → (p : bool) → ((p ≡ true) → a) → a → a
if true then t else f = t refl
if false then t else f = f
head₀ : ∀ {l} {a : Set l} → (ls : list a) → (not (empty ls) ≡ true) → a
head₀ {_} {_} null ()
head₀ {_} {_} (cons x xs) p = x
test₁ : ∀ {l} {a : Set l} → list a → a → a
test₁ ls v = if (not (empty ls)) then head₀ ls else v
test₂ : ∀ {l} {a : Set l} → a → a
test₂ v = head₀ (singleton v) refl
darkus
ФП(ФП) обрастает материальными артефактами

Это распечатанный в виде брошюры Альманах-2011 по конкурсам, а также мои визитные карточки от ФП(ФП). Как видите, ФП(ФП) начинает обрастать материальными артефактами.
На визитках, кстати, QR-код и оформление контактной информации в виде листинга на понятно каком языке программирования. Правда, не компилируется :).
Если хотите себе такие же (как брошюру, так и визитки), то обращайтесь.
14 мая 2012
Scala@livejournal.com
Вакансия Scala-developer'a (Москва)
Компания Иннова ищет Scala-программиста для разработки высоконагруженного серверного приложения (application server). Приложение обслуживает миллионы пользователей в России и Европе и является сердцем игровой платформы 4game.com.
Нужен человек, который понимает как создавать ПО, которое может работать без остановки круглые сутки, которому нравятся функциональные языки и возможность совмещать функциональный подход с ООП.
Вторая Scala-конференция в Петербурге

Подробнее о докладах на странице мероприятия или под катом.
Мероприятие бесплатное, для посещения необходимо зарегистрироваться.
В этот раз с докладами выступят:
- Евгений Бурмако (EPFL) — «scala.reflect»
- Василий Ременюк (Viaden) — «Курс молодого подрывника, или как с помощью Akka2.0 и одного сервера положить кластер онлайн игры»
- Александр Подхалюзин (JetBrains) — «Магия Scala изнутри»
- Светлана Исакова (JetBrains) — «Язык Kotlin»
Mike Potanin
Бесточетное программирование.
Надеюсь вам бросилось в глаза полное отсутствие точек?
Обсудить этот замечательный стиль кодирование можно здесь.
Меня эта статья заставила еще раз задуматься об избыточности библиотеки.
fmap имеет в специализированной форме дригие названия. Наиболее известное из них - map. Но и (.) им может быть! С точки зрения ТК это понятно, но я не додумался в стандартной библиотеке поискать инстанс.
Зачем так много имен для одной сущности? Не достаточно ли одного - из класса типов Functor? И для удобства назвать его там (.) - уж больно часто их приходится использовать.
darkus
Вопрос ко всем читателям относительно конкурсов
1. Интересна ли вам тема с конкурсами по ФП?
2.1. Если да, то участвуете ли вы в них?
2.2. Если нет, то насколько вас раздражает эта тема в моём журнале?
3. Если тема вам интересна, но вы не участвуете в конкурсах, то в чём выражается ваш интерес?
4. Любые комментарии и замечания всегда приветствуются.
Заранее благодарю всех откликнувшихся.
13 мая 2012
thesz
Встреча.
Место: Квартира 44 на Якиманке.
Время: 15-го числа в 19:00.
Точно буду я,
Я завтра буду окончательно устаканивать резервирование, так что если интересно, скажите в комментариях или письмом.
12 мая 2012
Erlanger.ru
Народный перевод книги Джо Армстронга на GitHub'е
Народный перевод книги Джо Армстронга "Programming Erlang" переехал на GitHub. Перевод, производимый силами сообщшества Russian Armstrong Erlang обрел новый адрес: https://github.com/dyp2000/Russian-Armstrong-Erlang
Для тех, кто не любит .docx, перевод также доступен тут: https://github.com/dieu/Russian-Armstrong-Erlang
blog : ∀a → ∀b → (a → b) → a → b
Agda2
Это же замечательно:
record Monad {o ℓ e} (C : Category o ℓ e) : Set (o ⊔ ℓ ⊔ e) where
field
F : Endofunctor C
η : NaturalTransformation id F
μ : NaturalTransformation (F ∘ F) F
open Functor F
field
.assoc : μ ∘₁ (F ∘ˡ μ) ≡ μ ∘₁ (μ ∘ʳ F)
.identityˡ : μ ∘₁ (F ∘ˡ η) ≡ idN
.identityʳ : μ ∘₁ (η ∘ʳ F) ≡ idNnponeccop
Алгебраические методы в программировании - лит-ра
Algebraic and Coalgebraic Methods in the Mathematics of Program Construction
Не знаю даже, с чего начать - столько сладкого. Вот содержание, смотрите:
http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/acmmpc-toc.pdf
Ещё интересно, что это учебник.
11 мая 2012
Erlanger.ru
Ф. Чезарини, С. Томпсон. «Программирование в Erlang»
Издательство «ДМК Пресс» выпустило перевод книги Ф. Чезарини и С. Томпсона «Программирование в Erlang».
Книга доступна, например, на «Озоне»: http://www.ozon.ru/context/detail/id/9552287/ или на сайте самого издательства: http://www.dmk-press.ru/catalog/computer/programming/functional/978-5-94074-617-1/ (тут дешевле).
Программирование в Erlang
Erlang Programming
- Автор: Ф. Чезарини, С. Томпсон
- Переводчик: А. Холомьев
- Языки: Русский
- Издательство: ДМК Пресс
- Серия: Функциональное программирование
- ISBN 978-5-94074-617-1, 978-0-596-51818-9; 2012 г.
Дополнительные характеристики
- Страниц: 488 стр.
- Формат: 60x90/16 (145х217 мм)
- Тираж: 300 экз.
- Переплет: Мягкая обложка
darkus
Продолжаем обучаться программированию: ФВП

Здесь я попросил сына провести луноход по шахматной доске этаким замысловатым маршрутом. Перед написанием программы мы долго сидели и обсуждали, как можно сокращать количество кода, как можно объединять в одну «подпрограмму» повторяющиеся куски. Пока, как видно, мы не изучали понятие параметра функции, поскольку это ещё сложновато. Да и «язык программирования» пока позволяет делать это без параметров. Так что смотрите. Заодно, подспудно, показал, что есть такое понятие, как функция высшего порядка (в данном примере — ПОВТОР). И, к тому же, изучили (пока не называя) способ разработки сверху вниз.
В процессе написания программы сын крайне радовался, что ему не надо писать 4 раза одно и то же. Даже благодарил меня за то, что научил.
Ну и, кстати, ваши комментарии его очень мотивируют. Он внимательно следит за тем, кто что пишет. Очень радуется тому, что вы оставляете комментарии с очень умными словами, которые он пока не понимает :).
Lisp@Habrahabr
[Перевод] Nikodemus' Common Lisp FAQ
Последнее обновление: 2012-04-13
Это очень неофициальное ЧаВО по языку Common Lisp, отражающее субъективное мнение Nikodemus Siivola. Этот текст частично основан на других ЧаВО, встречавшихся на просторах интернета и comp.lang.lisp.
Если вы думаете, что я воспользовался вашим текстом, буду рад признаться в этом, поэтому пишите на nikodemus@random-state.net.
Текущая версия этого ЧаВО доступна по следующим адресам:
http://random-state.net/files/nikodemus-cl-faq.txt
http://random-state.net/files/nikodemus-cl-faq.html
ЧаВО также периодически публикуется в comp.lang.lisp.
Читать дальше →
10 мая 2012
Scala@Habrahabr
Пишем простейший REST web-сервис на Scala
В этом примере мы будем вычислять «хеш» пароля.
Читать дальше →
Lisp@Habrahabr
[Перевод] Преимущества Common Lisp
Лисп часто рекламируют как язык, имеющий преимущества перед остальными из-за того, что он обладает некоторыми уникальными, хорошо интегрированными и полезными фичами.Далее следует попытка выделить набор особенностей стандартного Common Lisp, кратко и с примерами.
Эта статья, вероятно, будет больше всего полезна тем, кто имеет какой-то опыт в программировании, заинтересован лиспом и хочет лучше понять, что делает его таким привлекательным.
Текст по большому счёту основан на списке особенностей CL и обзоре CL Роберта Стренда (Robert Strandh). Читать дальше →
darkus
Приз зрительских симпатий за майский конкурс по ФП
Разыгрываем приз зрительских симпатий, любезно предоставленный нам издательством ДМК Пресс. Из-за ограничений движка ЖЖ вы можете проголосовать за двоих человек (я попытался распределить всех претендентов по двум вопросам поровну), но прошу сделать это только один раз. Вы также можете привлечь к опросу всех своих друзей и знакомых, приглашая их поучаствовать. Публикация ссылки на опрос у себя в бложике не возбраняется.Опрос продлится ровно неделю до 12:00 17.05.2012. С исходными кодами участников можно ознакомиться здесь.
Майский конкурс по ФП: арифметические задачи
Даём старт майскому конкурсу по функциональному программированию. Сегодня, воодушевившись прослушанным курсом по обработке естественного языка от Стэнфордского университета, я хочу дать уважаемым конкурсантам и любителям функционального программирования немного странную, но в то же время необычную задачу. Впрочем, я давно запланировал её в качестве задачи для Большого Ежегодного Конкурса, однако коллеги меня отговорили, сказав, что интереса она не вызовет. В итоге я решил переформулировать концепцию и выдать задачу в качестве традиционного ежемесячного конкурса.Итак, вот здесь вы можете скачать заархивированный файл. В этом файле на каждой строке находится условие арифметической задачи для первого класса. Например: «Велосипедистка проезжала ежедневно по 5 километров в течение 90 дней. Сколько километров проехано всего?». Всего задач 100 тысяч (изначально хотел было сделать 1 миллион, но потом подумал, что и сто тысяч вручную за четыре дня не прорешать). Конкурсант должен прислать мне файл с ответами, на каждой строке этого файла должно быть ровно одно число — ответ на соответствующую задачу. То есть конкурсант должен прислать мне файл, состоящий из 100 тысяч строк, на каждой строке находится одно натуральное число.
Я сам реализовал решатель арифметических задач на основе сложнейшего алгоритма (там объём составляет более миллиона LOC, я писал его ещё с прошлого года, к тому же привлёк к работе с десяток мексиканских программистов), находящегося на грани State-of-the-Art в области искусственного интеллекта. Этот алгоритм выдаёт 55 % правильных решений. Но я верю, что мои уважаемые читатели смогут сделать лучше. Так что призы будут выданы тем, кто сделает решатель, выдающий более 55 % правильных решений. Кто менее — уж извиняйте. Тех отправим в первый класс начальной школы :). Ну а места распределятся просто — чей решатель даст большее количество правильных ответов, тот выиграет и получит первый приз. Второй по точности решатель получит второй приз. Ну а приз зрительских симпатий отдадим по результатам голосования.
Свои ответы выкладывайте на какой-нибудь сервис для хранения исходных кодов, типа hpaste.org, в комментариях к этой записи помещайте ссылки как на исходные коды своих решателей, так и на файлы с ответами. Но файлы с ответами лучше присылать мне по электронной почте (адрес, кто ещё не знает, —
darkus.14@gmail.com), чтобы не перегружать хорошие сервисы мириадами чисел. Ну и от каждого конкурсанта я приму ровно один файл с ответами. Тут уж не обессудьте.Ответы принимаю до 10.05.2012. Дерзайте!
Дополнение 1: 10.05.2012 08:00 — Комментарии раскрыты, прекращаю принимать результаты, начинаю подводить итоги конкурса. Те, кто прислал мне результаты по почте, но ещё не отметился в комментариях, прошу это сделать — опубликуйте ссылку на свой код, чтобы всякий добрый человек мог воочию видеть.
Дополнение 2: 10.05.2012 11:00 — Итоги опубликованы.
Дополнение 3: 10.05.2012 12:00 — Опрос по поводу приза зрительских симпатий запущен. Прошу участвовать.
Предыдущие конкурсы:
1. Август 2011. Задача о возрастах детей математика: условие, результаты.
2. Сентябрь 2011. Кто на ком женат: условие, результаты.
3. Октябрь 2011. Задачи о переправах: условие, результаты.
4. Ноябрь 2011. Задача о надёжности кода: условие, результаты.
5. Декабрь 2011. Задача о конструировании чисел из чисел: условие, результаты.
6. Январь 2012. Расшифровка кода на языке Haskell: условие, результаты.
7. Февраль 2012. Мат в один ход: условие, результаты.
8. Март 2012. Переливание жидкости из сосуда в сосуд: условие, результаты.
9. Апрель 2012. Кельтская алхимия — трансмутация слов: условие, результаты.
Опять же надо упомянуть, что у ФП(ФП) есть официальный форум, где вы сможете не только задать вопросы по ФП и получить на них квалифицированные ответы, но и просто поболтать на программистские темы. Заходите, регистрируйтесь, общайтесь.
Если вы хотите дополнительно отблагодарить организатора (то есть меня), но не знаете как, то вам сюда. Собранные благодарности пойдут прямиком в ФП(ФП).
Итоги майского конкурса по ФП
Закрываем майский конкурс по функциональному программированию, который на этот раз был посвящён обработке естественного языка. Как я уже писал, я хотел организовать на основе этой задачи Большой Конкурс по ФП, но коллеги-друзья меня отговорили. Говорили, что она не будет никому интересна, дескать всяк напишет пару регулярных выражений, которые дадут стопроцентный результат. Отчасти они оказались правы, и в результатах этого конкурса лидируют те, кто очень тщательно подошёл к разработке паттернов, по которым строилась генерация текстов задач. Однако надо сказать, что и я подошёл к организации этого конкурса совсем не так, как это было бы для Большого Конкурса — малое количество разнообразия, типовые задачи и недоработанный генератор ЕЯ-текста, основанный на контекстно-свободных грамматиках и скрытых марковских моделях.В общем, генератор выдавал иногда такие перлы, что участники конкурса забросали меня сообщениями с ними. Кроме того, в него закралась позорная ошибка, которая не позволила участникам, кто очень хотел, выдать 100 000 правильных ответов. В итоге, максимальной цифрой стала 98 444, и это надо полагать стопроцентным результатом. Пересчитывать проценты не буду, просто в графе «Результат» в нижеследующей таблице укажу количество правильных ответов. Ну а эталонный файл каждый может взять здесь, чтобы проверить меня.
А вот и таблица с результатами. Поскольку тех, кто прислал максимальный результат, оказалось 8 человек, они распределяются по местам в соответствии с тем, кто первый прислал мне результаты на почту (а не опубликовал в комментариях ссылку).
| Место | ID | Язык | Результат | Призы |
| I | Haskell | 98 444 | Книга с автографом Скидка 2 % |
|
| II | Alexey Kishkin | Perl | 98 444 | Персональный электронный экземпляр Скидка 10 % |
| III | Матвей Котов | Shell | 98 444 | Персональный электронный экземпляр Скидка 2 % |
| IV | Perl | 98 444 | Персональный электронный экземпляр Скидка 8 % |
|
| V | Perl | 98 444 | Персональный электронный экземпляр Скидка 2 % |
|
| VI | Afiskon | Perl | 98 444 | — |
| VII | Nemerle | 98 444 | Персональный электронный экземпляр Скидка 10 % |
|
| VIII | SR0MAN0V | Perl | 98 444 | Персональный электронный экземпляр Скидка 4 % |
| IX | Константин Лихоманов | Haskell | 98 310 | Персональный электронный экземпляр Скидка 10 % |
| X | Python | 98 278 | Персональный электронный экземпляр Скидка 6 % |
|
| XI | reclosedev | Python | 98 081 | Персональный электронный экземпляр Скидка 2 % |
| XII | Shell | 97 513 | Персональный электронный экземпляр Скидка 2 % |
|
| XIII | Clojure | 97 215 | Персональный электронный экземпляр Скидка 2 % |
|
| XIV | Сергей Глазунов | C++ | 96 907 | Персональный электронный экземпляр Скидка 2 % |
| XV | sash-kan | Bash | 96 893 | Персональный электронный экземпляр Скидка 4 % |
| XVI | Dmitri Rostchin | F# | 96 888 | Персональный электронный экземпляр Скидка 2 % |
| XVII | Павел Платто | Haskell | 95 882 | Персональный электронный экземпляр Скидка 8 % |
| XVIII | Perl | 95 771 | Персональный электронный экземпляр Скидка 6 % |
|
| XIX | Python | 95 184 | Персональный электронный экземпляр Скидка 2 % |
|
| XX | Valentin Budaev | Racket | 94 402 | Персональный электронный экземпляр Скидка 2 % |
| XXI | dmitry_vk | Python | 90 768 | Персональный электронный экземпляр Скидка 2 % |
| XXII | Haskell | 87 931 | Персональный электронный экземпляр Скидка 8 % |
|
| XXIII | Aleksey Andrushko | C# | 67 406 | Журнал с автографом Скидка 2 % |
Здесь надо сделать несколько замечаний:
0. Первое место заняло решение, написанное на прекраснейшем из всех прекрасных языков программирования Haskell, и это действительно так. Но вам придётся поверить мне на слово, поскольку проверить вы это не сможете.
1. По результатам обсуждения и взаимному согласию с Алексеем Кишкиным, который и так получил все имеющиеся у меня на текущий момент материальные призы, приз за второе место отдаётся Алексею Андрюшко, который занял последнее место, показав наихудший результат. Это поощрительный приз за старание и рвение.
2. Коллега Afiskon уже получил скидку на печать моих книг в издательстве Самиздал в размере 10 %, а также все имеющиеся у меня на текущий момент нематериальные призы (и даже один материальный), так что ему на этот раз ничего не полагается. Кстати, не забывайте, что в указанном издательстве вы можете напечатать себе бумажные экземпляры моих книг с указанной скидкой. Для этого надо просто оплатить товар по цене уже со скидкой, а не указанной на сайте, а в заказе пояснить, откуда скидка, дать ссылку на соответствующую страницу у меня. К тому же, вы можете указать, чтобы отпечатанные книги они отправили мне, в таком случае я сделаю на них автограф и уже отправлю вам.
3. Этот конкурс является первым, в котором первое место по количеству использования занял язык Perl, а не Хаскель-Цацкель, как это было во всех прошлых конкурсах. Что это за язык такой Perl, чем он так интересен?
4. В этом конкурсе впервые участвует мой прекраснейший товарищ
В общем, вот так вот. Конкурс удался, это было прекрасно. В ближайшее время оформлю всем призы, разошлю. Те, кто получает материальные призы, прошу связаться со мной по почте, соорганизуемся насчёт отправки и получения. Ну а через некоторое время я запущу опрос на тему приза зрительских симпатий. Для этого пока ознакомьтесь с присланными конкурсантами исходными кодами.
Предыдущие конкурсы:
1. Август 2011. Задача о возрастах детей математика: условие, результаты.
2. Сентябрь 2011. Кто на ком женат: условие, результаты.
3. Октябрь 2011. Задачи о переправах: условие, результаты.
4. Ноябрь 2011. Задача о надёжности кода: условие, результаты.
5. Декабрь 2011. Задача о конструировании чисел из чисел: условие, результаты.
6. Январь 2012. Расшифровка кода на языке Haskell: условие, результаты.
7. Февраль 2012. Мат в один ход: условие, результаты.
8. Март 2012. Переливание жидкости из сосуда в сосуд: условие, результаты.
9. Апрель 2012. Кельтская алхимия — трансмутация слов: условие, результаты.
Нельзя не напомнить, что у ФП(ФП) есть официальный форум, где вы найдёте ответы на все вопросы по функциональному программированию, которые вас мучили до сих пор.
Да, ну и отблагодарить за прекрасный конкурс меня можно здесь. Как обычно, собранные благодарности пойдут прямиком в ФП(ФП).
nponeccop
Даёшь контравариантные функторы в typeclassopedia!
Invertible Syntax Descriptions: Unifying Parsing and Pretty Printing
http://lambda-the-ultimate.org/node/4191
Yan Tayga
Haskell для микроконтроллеров
Насколько я понимаю, можно просто скомпилировать с помощью GHC в С и потом уже в ассемблер нужного процессора. А как имитировать, например, работу с выводами портов побитово в i8051? Как вообще тут принято все делать и какие привычные грабли есть и распознаны?
"Записки программиста"
Задача о роботе-пылесосе без датчиков
09 мая 2012
nponeccop
FIX and FAST protocols implementations in Haskell
thesz
Читая жуйк по тэгу "Хаскель".
Спешу указать на моё творение. С методом Монте-Карло, что уже означает наличие двух необходимых компонентов любого успеха.
08 мая 2012
Tarantoga
Гусеничный Lisp-трактор
1) Список f содержит всего одну функцию. Её и запускаем первой.
2) Первая функция передает свой код в update.
3) Update "препарирует" код, находит номер текущей итерации, инкрементирует его и собирает такую же функцию, как ей передали, но с новым значением итерации.
4) Первая функция получает вторую функцию и добавляет её в конец списка f. Если список f содержит более трех элементов, то первый элемент списка f удаляется. Таким образом, в списке f содержится не более четырех элементов.
5) Первая функция запускает вторую функцию и завершается.
Выглядит и впрямь, как гусеничный трак :-)
(defn update [func]
(let [p (nth func 2) ;; Получить список (println (str "Hi for the " 1 " time!"))
n (nth (second p) 2) ;; Получить 1 из списка
;; Создать список (println (str "Hi for the " 2 " time!"))
new-p (cons 'println (list (map #(if (= n %) (inc n) (identity %)) (second p))))]
;; Заменить в теле функции (println (str "Hi for the " 1 " time!"))
;; на (println (str "Hi for the " 2 " time!"))
(map #(if (and (seq? %) (= (first %) 'println)) new-p (identity %)) func)))
(def f (ref ['(fn []
(println (str "Hi for the " 1 " time!"))
(let [func (last @f)
;; Обновить список функций f
;; Удалить первую функцию, если список f содержит больше трех элементов
new-f (if (> (count @f) 3)
;; Добавить обновленную функцию в конец списка
(conj (vec (drop 1 @f)) (update func))
(conj @f (update func)))]
(dosync (ref-set f new-f))
;; Выполнить последнюю функцию списка
((eval (last @f)))))]))
((eval (last @f)))
"Turtle//BAZON Group"
enhanced-thread-pool
Erlanger.ru
Sinan 4.0.0
Sinan, система автоматической сборки приложений под Erlang/OTP, обновилась до версии 4.0.0. Несмотря на то, что проект все еще дивет и развивается, о новых версиях информация появлялась редко. Tristan Sloughter, одиин из авторов Sinan'а, решил объявить о выходе версии 4.0.0 после того, как рассказал о проекте во время Lightning Talks на Erlang Factory 2012.
Подробнее о том, что такое Sinan, зачем он нужен, и как его использовать, можно на сайте проекта: http://erlware.github.com/sinan/
07 мая 2012
Tarantoga
CEDET 1.1, Emacs и Java
- установленный пакет flymake;
- установленный пакет auto-complete;
- скачанный CEDET 1.1;
- Ну и конечно же, последний Emacs и java.
Scala@Habrahabr
Вторая Scala-конференция в Петербурге

Подробнее о докладах на странице мероприятия или под катом.
Мероприятие бесплатное, для посещения необходимо зарегистрироваться.
Читать дальше →
Erlanger.ru
Spawnfest 2012
Spawnfest – это 48-часовой марафон по программированию на Erlang'е, по принципу Rails Rumble and Node Knockout.
В этом году Spawnfest пройдет 9-10 июля. Идея таких соревнований - создать наилучшее приложение на выбранной технологии (в данном случае - на Erlang'е) в сжатые сроки.
Правила соревнования доступны тут: http://spawnfest.com/rules/ Вкратце: Команды от 1 до 4 участников старше 13 лет, используя в основном Erlang (доп. технологии типа Javascript допустимы), должны с нуля написать самое шикарное приложение из всех возможных.
Зарегистрироваться на конкурс можно тут: http://spawnfest.com/take-part/
06 мая 2012
Макс Лапшин
Про erlang и скорость
Всё быстро. Кроме строк.
Пример: обрабатываем 300 000 строк из CSV файла. Сначала я провозился с их быстрым парсингом, даже сделал https://github.com/maxlapshin/csv_reader но, как оказалось, и этого мало. Поэтому обработку данных пришлось переделать в предпарсинг с сохранением:
file:write_file(Cache, erlang:term_to_binary(Rows, [compressed,{minor_version,1}])).
Чтение такой штуки гораздо быстрее, чем парсинг CSV.
Дальше больше. Данные надо обработать и обработанные строчки вылить наружу с некоторыми добавками. Обработка происходит примерно 1,5 секунд. Ещё 6-8 секунд занимает
io_lib:format("~s,~.2f,~B,~.2f...."). 8 секунд!Вот такая грязная штука: https://gist.github.com/2623569 позволяет сократить это время примерно до полусекунды.
Мораль: обработка строк одна из самых дорогих штук в эрланге, причем скорее всего из-за листов. Тот же io_lib:format надо будет попробовать запилить в виде NIF-а.
Russian-speaking Scala Enthusiasts
scalaby#9. Материалы
Встречу, состоявшуюся 28 апреля, открывал традиционно сильным докладом Евгений Бурмако. Евгений рассказал о появившихся в Scala 2.10 возможностях метапрограммирования, новом Reflection API, и макросах в Scala:
unwantedtextСяржук Медведев познакомил публику с популярным фреймворком Play2.0, продемонстрировав, почему разработка с его помощью такая простая и стремительная:
unwantedtextнаписал scala-enthusiasts-belarus@googlegroups.com (Scala Enthusiasts Belarus) 06 мая 2012, 07:00
04 мая 2012
Scala@Habrahabr
[Из песочницы] (Перевод) Перегрузка операторов в Scala

Можно долго спорить, является ли возможность перегружать операторы сильной или слабой стороной конкретного языка. Но факт остается фактом — в Scala такая возможность есть. Так почему бы её не использовать?
Материал статьи рассчитан в основном на начинающих Scala-разработчиков.
Читать дальше →
03 мая 2012
nponeccop
Линзы для Maybe
type MaybeLens v = Lens (Maybe v) v withDefault :: v -> MaybeLens v withDefault v = iso (fromMaybe v) Just withNoop :: MaybeLens v withNoop = lens (error "It's impossible to read with noop") (fmap . const) withFailure :: MaybeLens v withFailure = lens fromJust (\x (Just y) -> Just x)Юскейс у withDefault такой:
type Modifier a = a -> a counter x = mapLens x >>> withDefault 0 countItem :: String -> Modifier (M.Map String Int) countItem x = counter x ^+= 1 item x y = mapLens x >>> withDefault M.empty >>> counter y countItem2 :: String -> String -> Modifier (M.Map String (M.Map String Int)) countItem2 x y = item x y ^+= 1 itemCount x y countMap = item x y ^$ countMapВопрос ли залу:
а) дает ли полиморфность MaybeLens какие-то полезные свойства (например, является ли MaybeLens функтором)?
б) линзы кажутся хорошим базисом для построения абстрактных версий Data.Map и Data.Set. в HOOPL, помнится, были мапы на классах типов (Map k v =>). Известны ли вам другие попытки дизайна абстрактного интерфейса ко множеству и отображению?
в) линзы ввиду двунаправленности кажутся хорошим базисом для построения хитрых двунаправленных соответствий. Можно ли как-то изловчиться и сделать на линзах соответствие между программным текстом и AST (ака парсер+преттипринтер без копипасты)?
darkus
Публикация нового перевода: «Язык Haskell для детей»
Кстати, в связи с последними веяниями в Google прошу проверить, доступна ли папка?
02 мая 2012
linkfly
Проект LISP-DEV-TOOLS. Новая версия - 0.0.3.
Новое в версии 0.0.3 (по сравнению с версией 0.0.2):
-----------------------------------------------------
1. Добавлено автоматическое тестирование, запускается скриптом tests/run-tests.sh (рекомендуется запускать перед промышленной эксплуатацией).
2. Сделан общий интерфейс запуска для всех (за исключением XCL и WCL - они не поддерживают параметры
запуска) лисп-систем. Он представлен тремя ключами:
--common-load <файл_с_лисп_кодом>
--common-eval <заключенный_в_кавычки_лисп-код>
--common-quit
3. Осуществлено разделение на современные (modern), слишком сырые/молодые (young) лисп-системы и
устаревшие (obsolete). Это отображено в параметрах запуска скриптов ./get-all-lisps и ./provide-all-lisps
4. Налажена работа с символическими ссылками (для управления поддерживающис софтом) теперь изменение в поддерживающих инструментах не влиют на git.
5. Удалены некоторые уже не нужные файлы.
6. Обновлён и изменён TODO: скорректировано состояние выполненных и назначенных задач, а также изменён и скорректирован план развития проекта.
7. Начаты работы по отладке работы проекта в дистрибутиве Arch Linux.
8. Скорректированы некоторые сообщения системы.
9. Удалён баг проявляющийся при постройке XCL на Ubuntu 11.04 x86_64.
10. Исправлена загрузка JRE среды для системы ABCL.
11. Устранен баг в загрузке архивов с лисп-системами.
12. Изменена версия gawk - для устранение ошибки в обеспечении лисп-системы GCL.
13. Сглаживание различий в выводе программы "file", сейчас в проверке на символическую ссылку с помощью "readlink"
14. Устранены также другие ошибки.
------------------------------------------------------------------------------
darkus
Майский конкурс по ФП состоится в конце этой недели
Как обычно в начале месяца телеграфирую, что в конце этой недели состоится долгожданный многими конкурс по Функциональному Программированию, который традиционно проводится под эгидой ФП(ФП). На этот раз я подготовил очень нестандартную задачу. И, несмотря на то, что обещанный Большой Ежегодный Национальный Конкурс по Функциональному Программированию пока откладывается (пока на неопределённое время, по крайней мере за грядущий ICFP), подготовленная задача будет очень интересна тем, кто подвизался на поприще искусственного интеллекта.Старт будет дан утром примерно в 07:00 по московскому времени 05.05.2012. На решение будут даны все так называемые празднично-выходные дни, так что можно будет развернуться хорошо. Ну и оценка на этот раз будет более объективной, нежели просто «выиграл тот, кто первый успел». К тому же, у нас два новых приза: айн и цвай. Второй приз будет распределяться на основе «зрительских симпатий».
Дерзайте!
Предыдущие конкурсы:
1. Август 2011. Задача о возрастах детей математика: условие, результаты.
2. Сентябрь 2011. Кто на ком женат: условие, результаты.
3. Октябрь 2011. Задачи о переправах: условие, результаты.
4. Ноябрь 2011. Задача о надёжности кода: условие, результаты.
5. Декабрь 2011. Задача о конструировании чисел из чисел: условие, результаты.
6. Январь 2012. Расшифровка кода на языке Haskell: условие, результаты.
7. Февраль 2012. Мат в один ход: условие, результаты.
8. Март 2012. Переливание жидкости из сосуда в сосуд: условие, результаты.
9. Апрель 2012. Кельтская алхимия — трансмутация слов: условие, результаты.
Также напоминаю, что у ФП(ФП) теперь есть официальный форум, где вы сможете не только задать вопросы по ФП и получить на них квалифицированные ответы, но и просто поболтать на программистские темы. Заходите, регистрируйтесь, общайтесь.
Если вы хотите дополнительно отблагодарить организатора (то есть меня), но не знаете как, то вам сюда. Собранные благодарности пойдут прямиком в ФП(ФП).
01 мая 2012
Codedot
Мой второй Node.js-пакет
А вот этого я уже в других языках программирования как-то не видал. Эдакая «лиспо-лямбда» получается:
alexo@codedot:~$ wscat -c ws://localhost:8080/ connected (press CTRL+C to quit) < (function () { socket.say = function(data) { data = JSON.stringify(data); this.send(data); }; })(undefined) < (function () { socket.say("Hello World!"); })(undefined) > "Hello World!" < (function (data) { window.alert(data); })("Hello World!") disconnected alexo@codedot:~$
Кстати, wscat вчера починили.
Alexander Kuklev
SIP: Dependent type syntax for Scala
Now we can write Reads(res1, res2).X for the purpose I originaly wanted to use Reads(res1, res2) for.
It's worth to define some syntactic sugar for it! First, down with that nasty X. Second, let's add some sugar for generators:
Features:
– Such syntax can be easily extended for support of macro types in exactly parallel fashion to current syntax for macro methods. Like type DbTable(jdbcPath: String, creds: DbCredentials) = macro impl– With this syntax we also obtain nice syntax for dependent tuples and dependent function types.
I would like to thank Nada Amin (ندى أمين) from EPFL for a very insightful discussion on DOT, the future of the Scala type system.
30 апреля 2012
thesz
Тут эта...
Мы собрались встретится, поговорить. Если кто хочет послушать о жизни в американском стартапе, тесно связанном с Хаскелем, прошу присоединяться.
Про что я расскажу, ещё не знаю, но наверняка будет интересно. ;)
Место встречи ещё не обозначено, как и точное время и дата, к сожалению.



