Метка «haskell» - 3

Июньский конкурс по ФП: поиск закодированной фразы мудрецаЗапоздало спешу представить на суд внимательного читателя отчёт о проведении конкурса по функциональному программированию под эгидой Фонда Поддержки Функционального Программирования ФП(ФП) в июне месяце сего года. Всем желающим была предложена задача, которую предложил на конкурс один наш добрый коллега, участвовавший в своё время в разработке решения задачи про полубезумного Доктора Х (см. отчёт на Хаброхабре «Поиск скрывающегося Доктора X среди пациентов — решение более сложных логических задач»). Условие задачи было таково…

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

Один восточный мудрец проникся духом Олимпийского движения и послал барону Пьеру де Кубертену ребус-шараду, в котором закодировал послание всем добрым людям мира:

Июньский конкурс по ФП: поиск закодированной фразы мудреца

Но мудрец не был бы самим собой, если бы не сделал всё это в виде математической головоломки. Как вы видите, здесь у нас есть диаграмма Венна, показывающее пересечение пяти множеств. Каждый сектор, образуемый пересечением, помечен буквой или каким-то иным символом, в том числе пробелом. Необходимо расставить числа от 1 до 15 в секторах таким образом, чтобы суммы чисел в каждом из пяти множеств, помеченных цветными кольцами, были равными друг другу. Это даст ключ к расшифровке послания.

Не совсем понятно почему, но задача оказалась не совсем уж и интересной. В конкурсе приняло участие всего только два человека, а ещё несколько вполне успешно «навангавали» правильный ответ, что, впрочем, за участие и тем более решение не засчитывалось. Ну а я сам, как обычно, предлагаю ознакомиться с кратким отчётом, описывающим решение поставленной задачи на прекрасном языке Haskell.

Читать полностью »

Первый высокоуровневый язык программирования для квантовых компьютеровХотя квантовые компьютеры существуют пока только в теории, но это не мешает делать обоснованные предположения об их будущей архитектуре и, что более важно, об интерфейсе взаимодействия с ними. Таким образом, уже сейчас есть возможность проектировать программные симуляторы квантовых компьютеров — и писать софт.

Группа американских учёных, получив финансирование от исследовательского центра Национальной разведки США (IARPA) разработала высокоуровневый язык программирования Quipper. Он создан на основе Haskell и лучше подходит для реализации квантовых алгоритмов, чем QCL (основан на C).

На сегодняшний день известно как минимум 45 алгоритмов для квантовых компьютеров. Все они описаны в научных статьях, но ни один не был реализован в программном коде. С появлением Quipper появилась такая возможность. В дальнейшем программисты смогут просто использовать готовые библиотеки для квантовых компьютеров, как они это делают сейчас на высокоуровневых языках для классической архитектуры.
Читать полностью »

Хотелось бы остановиться и посмотреть на развитие языков программирования с точки зрения развития пользовательских типов данных (ПТД).
Сразу хочу оговориться, под пользователями понимаются программисты, как люди, пишущие код на этих языках. Ну, и те, кто этот код сопровождает или просто читает.

Пользовательские типы данных — это типы данных, которые могут быть созданы пользователем на основе того, что доступно в языке.
Развитие пользовательских типов данных в программировании
Пользователи желают иметь примерно такие типы данных

Пользователи хотели иметь возможность составлять данные так, как они сами того хотят. Хотели, хотят, и наверняка будут хотеть. Всё больше, всё разнообразней и сильнее.
Именно поэтому полезно проследить за развитием пользовательских типов данных в программах и языках программирования.
Читать полностью »

в 17:19, , рубрики: haskell, heroku, Веб-разработка, метки: ,

Haskell — пока еще единственный язык программирования, в котором есть оператор «фтопку» (>>=)

Абсурдопедия

Планировал начать с описания того, как ошибаются люди, полагающие Haskell бесполезным с практической точки зрения, сферическим языком в вакууме и т.д. Но, боюсь, за меня все уже сделали авторы Real World Haskell. Была идея рассказать о том, насколько красив и могуч этот язык программирования — но подвел тяжелый слог и неумение придумать захватывающий сюжет с неожиданной развязкой. Поэтому отброшу все лишнее и расскажу о своих злоключениях веб-разработки на Haskell.
Читать полностью »

Большой бедой Узким местом статической типизации являются гетерогенные коллекции и вариадические функции. Поэтому в RPC-библиотеках часто встречается подход, когда входящие данные так и лежат одним ADT-куском, а для методов один такой же плоский тип "[Foo] -> IO Foo", реализации которого копипастят десериализацию/сериализацию, что неудобно и плодит ошибки, в т.ч. рантаймовые.

Решение этой задачи меня беспокоило практически с самого начала практического применения мной хаскеля и, наконец, вчера ночью на меня снизошло вдохновение аж в 6.5 миллиолега и после сеанса гадания на ошибках и беседы с ghci у меня всё получилось.

Священный грааль динамической диспетчеризации

Читать полностью »

Немного стеганографии: о подготовке апрельского конкурса по ФПСегодня я с большим опозданием спешу отчитаться о втором конкурсе по функциональному программированию в 2013 году, который проходил под эгидой ФП(ФП) в течение первой недели апреля. Конкурс проходил в течение недели и нескольких дней и был объявлен в новом официальном блоге ФП(ФП), а ссылки на него распространялись по всем старым блогам.

Однако сразу скажу, что то ли я перемудрил с организацией и задачей, то ли ещё по каким-то причинам, но в конкурсе приняло участие только двое конкурсантов, которые и так обычно принимают участие во всех мероприятиях ФП(ФП). Так что можно констатировать, что в этот раз конкурс не то, чтобы совсем не удался, но совсем не достиг тех целей, которые я перед ним ставил. А у меня было довольно много радужных надежд именно на этот конкурс, ведь я посвятил ему довольно много времени в качестве организатора.

Читать полностью »

В этой статье я хочу рассказать о том, как реализовывал алгоритмы, связанные с базисами Грёбнера, на языке Haskell. Надеюсь кому-нибудь мои идеи и объяснения окажутся полезными. Я не собираюсь вдаваться в теорию, так что читателю стоит быть знакомым с понятиями полиномиального кольца, идеала кольца и базиса идеала. Советую прочитать вот эту книгу МЦНМО, в ней подробно расписана вся необходимая теория.

Основной предмет статьи — базисы Грёбнера идеалов колец многочленов от нескольких переменных. Это понятие возникает при изучении систем полиномиальных уравнений и даёт очень хороший способ для их решения в большинстве случаев. В конце статьи я на примере покажу, как можно применять эти идеи.

Самый главный результат, который даёт эта теория — хороший способ решать полиномиальные системы уравнений от нескольких переменных. Даже если вы не знакомы с высшей алгеброй или с Haskell, я советую вам прочитать эту статью, так как эти самые методы решения объяснены на уровне, доступном школьнику, а вся теория нужна только для обоснования. Можно спокойно пропустить всё, что связано с высшей алгеброй, и просто научиться решать системы уравнений.

Если вас заинтересовало, прошу под кат. Читать полностью »

3.98 КБУважаемым читателям хочу представить второй сборник отчётов по ежемесячным конкурсам по функциональному программированию, которые проводятся под эгидой ФП(ФП). Сборник содержит двенадцать отчётов и исходные коды по каждому из них. Всем, кто интересуется функциональным программированием и собирает литературу по нему, данная книга будет интересна (в том числе и потому, что это уже второй экземпляр в серии).

Книга выпущена только в виде электронного издания и распространяется на безвозмездной основе (но всякий всегда может перечислить благодарность в пользу ФП(ФП), и я буду этому очень рад). Скачать её можно здесь. Те, кто ещё не может отказаться от бумажных вариантов книг, всегда смогут воспользоваться технологией печати по требований (print on demand) и заказать себе экземпляр в малой типографии (о возникновении возможности для этого я сообщу дополнительно в официальном блоге ФП(ФП): haskell98.blogspot.ru).

Далее в этой заметке будет приведено расширенное содержание Альманаха, в том числе и для того, чтобы здесь был набор ссылок на отдельные заметки, которые я публиковал на Хаброхабре.

Читать полностью »

Небольшое обновление для SublimeHaskell.
Картинка для затравки, список изменений под катом
image
Читать полностью »

Игра в «кошки — мышки», поиск минимальной стратегииНаступил 2013 год, и мы успешно провели первый в этом году конкурс по функциональному программированию под эгидой ФП(ФП). В 2013 году конкурсы стартуют всё так же традиционно на первой длинной неделе месяца, но уже не каждого, а один раз в два месяца. Так что в 2013 году запланировано проведение шести конкурсов по ФП: в феврале (который мы сегодня и опишем), в апреле, в июне, в августе, в октябре и в декабре.

Задачу на февральский конкурс подготовил наш добрый коллега Александр Лебедев, за что ему низкий поклон, всяческие благодарности и занесение имени в Скрижали Славы ФП(ФП). Задача была из серии игр один-на-один, которую мы назвали «кошки — мышки»:

Есть ящик, состоящий из пяти ячеек, последовательно соединённых друг с другом, то есть у каждой ячейки ровно две соседние, кроме крайних, у которых по одной соседней (другими словами, ящик — это линия из пяти сегментов). В какой-то ячейке сидит мышь, и кошка не знает, в какой именно. Игра состоит из набора ходов до победы кошки. Один ход в игре описывается двумя полуходами:

  1. Кошка кладёт лапу на какую-то ячейку ящика. Если под лапой оказывается мышь, то игра окончена, и кошка победила.
  2. Если кошка не положила лапу на ячейку с мышью, то мышь перебегает в соседнюю ячейку (даже может перебежать в ту ячейку, на которую кошка клала лапу). В какую именно, кошка не знает.

Задача: написать программу, которая рассчитывает для кошки победную стратегию, и желательно содержащую наименьшее число ходов.

Если кому-то интересна реализация решения этой задачи на языке Haskell, то добро пожаловать под кат.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js