Sergey Lymar

Октябрь 6, 2009

Бинарная сериализация в Haskell

Рубрика: Haskell, ФП — Sergey Lymar @ 5:05 дп

Для бинарной сериализации в Haskell существует модуль Data.Binary. Без побочных эффектов (де)сериализует в/из Data.ByteString.Lazy. Он пока не идет в поставке с GHC и его нужно руками ставить из hackage. Использовать его не просто, а очень просто:
(далее…)

Октябрь 5, 2007

Haskell в реальной жизни

Рубрика: Haskell, ФП — Sergey Lymar @ 1:32 дп

Итак! Этот долгожданный момент всё-таки наступил! Я получил свой первый опыт Haskell в коммерческом программировании!
Рассказываю как дело было:
(далее…)

Август 10, 2007

Ханойские Башни

Рубрика: Haskell, ФП — Sergey Lymar @ 1:30 дп

Давненько я ничего про Haskell не писал… Исправляюсь.
Задачу про Ханойские Башни (Towers of Hanoi) придумал французский математик Эдуард Люка в 1883 году. Существует легенда об индийском храме в котором есть большая комната с тремя алмазными столбиками на которые нанизано 64 золотых диска. И бог Брама повелел переложить диски с одного столбика на другой, и когда эта задача будет решена наш мир разрушится…
Условия головоломки: есть три столбика, на 1-й нанизана пирамида из n дисков (внизу самый большой диск, над ним чуть меньше и так далее), необходимо переместить эту пирамиду на 3-й столбик, перемещая по одному диску, при этом соблюдая условие что нельзя класть больший диск на меньший.
Это классическая задача на тему «рекурсия» и я думаю все кто хоть как-то связан с программированием её решали. Решается она очень просто:
(далее…)

Июль 23, 2007

Эффективные массивы в Python

Рубрика: Python — Sergey Lymar @ 11:13 пп

Возвращаясь к теме вызова нативных модулей из Python (теперь это в Linux, но в Windows принципиальных различий быть не должно).
В Python есть очень полезный модуль для работы с массивами, называется он, как не странно, array. Это не единственный модуль для работы с массивами, но он очень удобен, если необходимо обмениваться массивами с программами на C/C++ (например OpenGL текстурку скормить, или просто все тяжелые вычисления на C/C++ написать):
(далее…)

Июль 5, 2007

Python и функциональное программирование

Рубрика: Python — Sergey Lymar @ 1:02 дп

Всё таки после того как попишешь на функциональных языках, начинаешь по-функциональному писать где можно и где нельзя.
Вот скажем такой замечательный язык как Python, в нем даже есть наше любимое ключевое слово lambda и некоторые другие функциональные вкусности. Но в сравнении с мощностью Haskell, Python, мягко говоря, курит в сторонке.
Как скажем в Python запихнуть ветвление внутрь lambda?
(далее…)

Май 13, 2007

Использование dll из Python

Рубрика: Python — Sergey Lymar @ 2:19 пп

Вообще использование dll из Python особой проблемой не является, для этого есть модуль ctypes, который, начиная с Python 2.5, входит в состав этого самого Python’а. Но по какой-то загадочной причине даже вездесущий Google не смог найти примера связки "своя dll" + "своя python программа", а там есть некоторые неочевидные грабли: когда "своя dll" будет подключаться к чему угодно, но Python будет рапортовать:

ValueError: Procedure called with not enough arguments (N bytes missing)
or wrong calling convention

Или говорить, что он ваших функций в упор не видит.

Так что, как говорят буддисты, на благо всех живых существ!
(далее…)

Декабрь 13, 2006

Статья

Рубрика: Haskell, ФП — Sergey Lymar @ 4:46 дп

Сегодня закончил статью «Простые числа. Решето Эратосфена». Гремучая смесь Haskell'я в качестве языка для исследований и C# в качестве языка реализации. Вычислил 1`907`461`679 простых чисел, от 2 до 44`783`981`911 :) . А теперь спать-спать-спать!

Ноябрь 25, 2006

Функции как данные. Замыкание

Рубрика: Haskell, ФП — Sergey Lymar @ 12:21 дп

Было это в самом-самом начале моего изучения функциональных языков. Читая SICP (русский перевод) я понял что такое замыкание :) . Попробую это описать. Замыкание контекста - способность лямбда функции сохранять контекст, в котором она была определена. Это свойство лямбда функций можно использовать для хранения данных, т.е. некоторые данные можно хранить в виде функций. Извлекать эти данные можно с помощью других функций. Попробуем разобраться (на примере хранение пары):

pair a b = \fnc -> fnc a b
first p = p (\a b -> a)
second p = p (\a b -> b)

Итак, определяем пару как лямбда функцию от одного аргумента (этим аргументом впоследствии будет другая функция), этот аргумент применяется к членам пары. Функция получения первого члена пары будет функцией одного аргумента, которая будет применять этот аргумент к лямбда функции двух аргументов

\a b -> a

Функция получения второго члена пары определяется аналогично.

Теперь мы можем определить пару

some_pair = pair 1 2

И проверить как работают функции first и second

> first some_pair
1
> second some_pair
2

Итак, много-много малопонятного текста на русском, и всего три простые строчки на Haskell’е :)

Март 28, 2006

Страшная строка

Рубрика: Программирование — Sergey Lymar @ 11:14 пп

Некоторое время назад, в рамках внедрения аспектно-ориентированного программирования, я написал одну из самых страшных строчек в своей жизни:
(далее…)

Январь 1, 2006

Записки начинающего функциональщика: восемь ферзей возвращаются

Рубрика: Haskell, ФП — Sergey Lymar @ 10:31 пп

Здравствуйте дорогие!

Во-первых, разрешите всех поздравить с наступившим Новым 2006 Годом! Счастья, удачи, успехов всем в новом году!

Во-вторых, разрешите напомнить, что настоящий Мастер использует все подворачивающиеся возможности для достижения полного и окончательного просветления :) . Вот и ваш покорный слуга, находясь в состоянии лёгкой постновогодней абстинентции родил следующее:

Это опять задача о расстановке ферзей, на сей раз занимаемся только подсчётом количества возможных расстановок:
(далее…)

Предыдущие записи »

Сайт работает на WordPress