OdHUG

Jun. 22nd, 2013 10:58 am
alogic: (war)
На встрече любителей Haskell вчера был просто аншлаг - 6 человек пришло. Ещё должен был быть американец, который из Швеции на велосипеде приехал, но его, видать, в музыкальных тусовках закрутило. Поговорили об архитектурной красоте Haskell, что в других языках надо гвоздями прибивать, здесь можно сделать на уровне библиотеки. Вообще, у Ромы даже презентация появилась (можно смотреть в браузере) про то, что такое объектно-ориентированное программирование с точки зрения Haskell. Выяснилось, что Рома с Женей продолжают разбирать "Mitchell. Foundations for programming languages, 1996 (MIT)" (pdf), причём делают это вдвоём, без оглядки на интеллектуальные меньшинства. Ещё было про стрелки, что в них можно встраивать ограничения, в отличие от монад.
alogic: (war)
Смотрю русский курс "Функциональное программирование" на примере языка Haskell. Интересные моменты:
лекция 1, 31:36
Программировать в функциональном стиле нельзя, жизнь такая. Я сам по нему только курс читаю, а пишу на Джава, говорит нам преподаватель Кубенский А.А..

лекция 2, часть 2
На 1:26:44 выглядит так, что лектор не слышал про сечения, не знает, как сделать из бинарной функции унарную, например любимую в ЖЖ (+1) и затем передать её в map.
Я, конечно, понимаю, что начинающим много не надо, но хотелось бы тщательне́й.

P.S. В лекции 3, ч. 2 (42:11) про сечения есть. К концу этой лекции вы уже сможете понимать выражения вида

searchList :: (Eq a) => a -> [a] -> Bool
searchList e = (foldr (||) False) . (map (== e))

Кстати, понравилось в лекциях Кубенского, что он активно использует foldr и показывает, фактически, как заменять этой функцией циклы.

лекция 4, часть 2 8:56 Лектор отмочил: "вещи, которые вставлены искусственно в функциональный язык программирования, но которые не являются по существу функциональными, в частности монады". Это как? До сих пор во всю использовал list comprehension и вдруг заявляет, что это не фукционально? Списки и Maybe, которые тоже монады, искусственны? Эх, Александр Александрович, надо было лучше в школе учиться. Ну и до этого Штирлиц тоже прокалывался, заявляя, что нельзя использовать правую свёртку, то есть foldr с бесконечными списками. А как раз foldr то и можно

foldr (:) [0] [1..]
alogic: (war)
Нью-Йорк пока не собирается переезжать в Одессу, но международный хаскельный турнир Рома Чепляка здесь уже организовал. Хакатон или съезд хакеров для того, чтобы познакомиться и вместе поработать над проектами, написанными на языке Haskell пройдёт 3-5 мая (пятница-воскресенье). Уже заявлены следующие проекты:

  • Cabal - установщик хаскелл-программ и библиотек, аналог пакетных менеджеров в дистрибутивах Linux. Один из важнейших инструментов в мире Haskell.

  • Hakyll - генератор статических сайтов. С помощью него создан сайт Odessa Haskell user group, персональная страница Ивана Веселова.

  • HasFix - проект Ромы, позволяющий автоматически вносить изменения в исходный код хаскелл-программ, не меняя стиля и форматирования, если разработчики библиотек внесли изменения в API. Достаточно будет вместе с библиотекой прислать файл-описание изменений. Видео-рассказ автора.

alogic: (war)
Закончился курс по Haskell небольшим экзаменом-хакатоном на котором всем предложили написать игру "сапёр" за полтора часа. Я опоздал, так что у меня был всего час за который я наваял печать поля 10х10. Кошмарный результат зато достижение для человека, который научился использовать list comprehension и mapM_, а, главное, понимает теперь, как это работает.

Рома, который писал вместе со всеми 5 человеками, решившимися прийти на экзамен, показал в конце свой код. Естественно там был сапёр с ядерным двигателем на монадных трансформерах. Чтобы так писать надо учиться дальше.
alogic: (war)
Одно горе омрачило этот день, пропустил встречу по Haskell. Ну, зато лекция в субботу будет, теперь в 9 утра. Темы и задания по этой же ссылке.
alogic: (war)
Субботний курс по Haskell на мехмате.
домашнее задание, настройка хаскель-платформы


В объявлении, как говорится для привлечения внимания, решили написать, что с 8:00 продвинутый курс, хотя на самом деле он такой же, как и в 10:30. На первую лекцию пришло 29 человек. Умеет Рома привлечь внимание.
alogic: (Default)
Сегодня Рома Чепляка собирал второй раз любителей Haskell в Одессе (OdHUG). Кроме меня пришёл ещё [livejournal.com profile] bodigrim_new и это было прекрасно. Зачем нужна толпа, когда её пока занять нечем? Рома ещё не решил, что он хочет написать такого или сделать, вроде обучающего семинара, чтобы людям было интересно участвовать. А для начала нужна небольшая групка, которая чем-то интересным занята. Остальные наши, в основном слабоинициативные люди, начинают присоединяться потом.
alogic: (Default)
Языку Unix shell уже почти 40 лет, им пользовался каждый, кто хоть раз заходил в командную строку, но до сих пор не существует ни одной свободной реализации компилятора для него. Да и несвободных всего, по-моему, одна штука. Так как Линукс сейчас встраивают куда угодно, в каждый телевизор, например, умеющий проигрывать кино с флешки, и интерпретаторы везде используются разные, то возник вопрос об ускорении скриптов инициализации и проверке их на соответствие стандарту. Как раз работа для компилятора, который сейчас пишется в Киеве и называется loker. Язык разработки -- хаскель. В субботу и воскресенье в Киеве пройдёт хакатон на котором этот и другие проекты будут представлены. Я уже еду.
alogic: (Default)
Завтра приезжает Рома Чепляка, чтобы прочесть лекцию "Рекурсивные функции и неподвижные точки". Согласно завету, что "на встречу со звездой надо приходить подготовленными", посмотрел эту страничку. Там в середине сказано, что только Y комбинатор обеспечивает возможность рекурсии. Вот оно что. Помнится Рома уже рассказывал на эту тему год назад, когда мы сидели на траве морского склона, но я тогда не очень понял. Теперь предоставляется второй шанс. А впрочем, что такое год по сравнению с почти столетием, когда Шёнфинкель из Одессы открыл комбинаторную логику.
alogic: (Default)
Сегодня провели выездное заседание - на пляже. Темой были полный частичный порядок и определение с его помощью оператора неподвижной точки fix. Как показал опыт, лучше всего всё самостоятельно доказывается, сидя прямо в воде. Как-никак водяное охлаждение процессора.
alogic: (Default)
Поездка в Киев на семинар прошла в напряжённом, но занимательном режиме. Приехав в 7:30, мы, как самые умные, не стали страдать в привокзальных забегаловках, а отъехав пару остановок на троллейбусе, с шиком расположились в пустой, утренней "Пузатой Хате". Потом наша компания, по наводке, рванула на другой конец Киева, чтобы попутешествовать в патентованном трёхмерном кинотеатре IMAX по Международной Космической Станции. Эффект присутствия был просто потрясающий. Ну буквально как будто кинотеатр оказался прямо в космосе. Кино закончилось за 45 минут до начала семинара, так что пришлось двигаться шагом, местами переходящим в бег, чтобы успеть, но мы успели.

На семинар пришло не менее 40 человек. Первым докладчиком был [livejournal.com profile] nponeccop, однако он переоценил подготовленность публики и начал со слишком серьёзных результатов, так что пришлось Роме вернуться к азам и провести небольшой ликбез по основам. И он сделал это настолько зажигательно, рассказав про типизированное лямбда-исчисление по Карри, способ вывода термов по Хиндли-Милнеру, что, по-моему, представление об этом получили все, даже если до этого о предмете только слышали. Люди начали активно задавать вопросы, обсуждать и после доклада наградили выступающего заслуженными, бурными аплодисментами.
alogic: (Default)
В прошедший четверг Женя Беркович показал, как в языке PCF программируется любая вычислимая арифметическая функция, то есть, что этот язык Тьюринг-полный. Ну и продолжили про универсальную алгебру. В частности, на дом задачку оставили.
alogic: (Default)
Завтра очередной раз втроём собираемся на семинар по функциональному программированию, надо хоть упомянуть что было в прошлый раз. Если кратко, то так: eager evaluation, пример по нему, определение универсальной алгебры. Подробности при личной встрече.

UPD. На семинаре была задачка. Доказать, что если на множестве есть некая операция ∘ и существует элемент k такой, что
(k∘x)∘y = x, ∀x,y
то это множество состоит либо из одного, либо из бесконечного количества элементов.
alogic: (Default)
В прошлый четверг и в эту среду изучали по-порядку: введение рекурсии в наше типизированное исчисление с помощью оператора неподвижной точки fix; редукционные стратегии.
alogic: (Default)
Кратко, что было на семинаре в четверг. Всего нас было трое, так что в основном общались на близкие к основной темы. Начали с понятия подстановки и β-редукции, нормальной формы, то есть такой, когда уже никакие редукции дальше над выражением невозможны, дальше появились понятия слабой и сильной нормализации. Потом решили поупражняться, как же это всё делается руками и разобрали пример.
пример )
На этом примере иллюстрируется понятие лексического (статического) способа разрешения переменных (lexical scoping), когда значение переменной задаётся ближайшим, самым первым определением. Это отличается от динамического разрешения (dynamic scoping) при котором существуют глобальные переменные и их значение определяется во время выполнения и ближайшим окружением. Это всё связано с понятием замыкания (closure) с помощью которого можно эмулировать объектно-ориентированное программирование.
alogic: (Default)
Записали формальные основы синтаксиса лямбда-исчисления, поговорили про понятие семантики, комбинаторы, их связь с парадоксом Рассела. Y-комбинатор, как один из видов парадокса Рассела и подозрительность бестипового лямбда-исчисления. Затем перешли к введению типов по Чёрчу, понятию контекста (есть такие, контекстные грамматики), аксиомам для выведения типов выражений. Я отвлёкся на попытку понять, как же из этих аксиом у кого-то всё-таки получается вывести тип и пропустил пару теорем - про единственность типа и независимость его от переименования переменных. Ещё, вроде, была теорема, что если у выражения удаётся вывести тип, то в нём нет свободных переменных. Теперь буду читать про это до следующего четверга.
alogic: (Default)
Сегодня семинарчик открылся по формальным основам программирования. Как и в прошлом году, опять почти про хаскель, но более абстрактно, чтобы лучше понимать что и зачем. Узнал, что есть три вида семантики и существует ужасный парадокс

(\x.F(xx))(\x.F(xx)) = F((\x.F(xx))(\x.F(xx)))

то есть любая функция F должна иметь неподвижную точку (точку, в которой значение функции равно самой этой точке, либо такой же функции, программе, если мы над ними преобразования производим). А это несправедливо по отношению к функции отрицания, например.

Upd. Литература.
Барендрегт X. Ламбда-исчисление.
В частности, конструкции ламбда-исчисления воспитывают интуицию, позволяющую ориентироваться в семантике языков программирования. Эта книга написана для логиков, математиков, специалистов по информатике и философов.
alogic: (Default)
Была суббота и был Хаскель. Всё-таки большое счастье учиться, когда это происходит добровольно. Зашли к монадам сегодня с другой стороны, с практической. Дело пошло веселее, потому что написать дома свою монаду я не сумел. Утешает только, что и остальные тоже. Подёргали за хвост хвостовую рекурсию и всякие системные вызовы, вроде переменных среды. Не, ну числа Фибоначчи, само собой, списки, которые строятся из самих себя. Я раньше думал, что лень это порок, оказалось большое преимущество. Хаскель, язык ещё ленивее меня. Вообще-то правильное название языка Хаскель - Моисей Исаевич, зря американцы его сокращённо называют. Конспектирую лекции на своём наладоннике и вот где, надо сказать, великая мощь текстового редактора Emacs проявляется. Пока Рома пишет на доске название функции, Emacs уже автодополнением её вставляет. Так что я даже тестовые примеры в интерпретаторе запустить успеваю. Всё-таки мучить лектора большое удовольствие, чувствуешь потом вдохновение целый день.
alogic: (Default)
Сегодня присутствовал при том, как рождаются монады. Чистая детская радость от того, что хоть что-то понимаешь:)
alogic: (Default)
И вторая лекция по Хаскелю окзалась замечательной. Рома уже выложил темы предыдущей и фотку. В этот раз нас было всего шестеро, но зато компания всех знакомых. Казалось бы ходить на лекции анахронизм, когда в интернете всё самому прочитать можно, спросить, если что непонятно, но что-то есть в хорошей компании вдохновляющее. Я уже прямо загорелся перейти на Xmonad с KDE. И совсем неожиданное открытие. Оказывается Моисей Шейнфинкель, основатель комбинаторной логики, которую вслед за ним развил Хаскель Кёри, учился в этом же самом Одесском университете ровно 100 лет назад. Вот уж где мистика. 108-ю аудиторию надо назвать "аудиторией Шейнфинкеля", а то не повезло Моисею Исаевичу ни с именем ни с фамилией. Имя Хаскеля Кёри разобрали на 2 языка и одну функцию, а про Моисея Исаевича известно только, что зачем-то в 1939 году он вернулся в СССР, где и сгинул в Москве в 1942, да и то насчёт даты смерти сомневаются.

Profile

alogic: (Default)
alogic

December 2016

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 19th, 2025 05:42 am
Powered by Dreamwidth Studios