Рубрика «haskell» - 22

Управление лифтами: решение на языке HaskellТрадиционный конкурс по функциональному программированию состоялся в июле. Судя по количеству участников, большинство апологетов программирования на этот раз убыли на отдых, либо не стали участвовать в конкурсе, экономя силы и готовясь к ICFPC, который в этом году состоялся через неделю после моего мероприятия. Тем не менее, в конкурсе на этот раз приняли участие девять человек, из которых семеро дали в той или иной степени правильные ответы. Распределение по языкам программирования: Haskell — 4 решения, из которых 2 некорректные; C++, Clean, F#, Java и Perl — по одному решению.

Задача на этот раз была из области автоматического управления. Конечно, она всё также сводилась к поиску на графе, для чего всяко можно использовать алгоритм A*. Тем не менее, большинство участников выбрали реализацию ad hoc, в том числе и победитель. Вот примерное условие:

На улице генерала Белова стоит четырнадцатиэтажный дом.

На первом этаже живет Митя. На втором — Петя, Тёма и Саша. На третьем — Витя, а на четвёртом — Маша и Паша. Кто живёт выше — никто не знает.

Митя и Витя собираются в гости к своему однокласснику Тёме. Паша позвонил Пете и попросил его вернуть конспект по ОБЖ. Сашина кошка снова улизнула из квартиры и наверняка греется у батареи на третьем этаже. Саша полон решимости вернуть её домой. Маша, тем временем, хочет сходить в магазин за новым велосипедным звонком.

В начальный момент времени лифт находится на первом этаже. Одновременно в лифте может находится не более двух человек, а пользоваться лестницей нельзя из-за ремонта. «Шагом» считается перемещение лифта между парой соседних этажей. В начале каждого шага ученики могут свободно перемещаться между лифтом и лестничной площадкой.

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

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

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

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

Этот топик для тех, кто хотел бы опробовать Haskell на деле, но имеет горы полезного C и C++ кода с которым требуется считаться.Читать полностью »

Приветствую.

Уж не знаю, как так вышло, но игрался я на досуге с лямбда-выражениями в С++11 (о которых, к слову, я уже писал статью, снискавшую пару лет назад на удивление достаточно неплохую популярность), и под наркотическим воздействием впечатлением от языка Haskell начал разбираться с такими понятиями, как частичное применение и каррирование в контексте языка С++. И для начала, пожалуй, неплохо бы нам определиться с этими терминами.

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

Доброго времени суток, уважаемый читатель!

Прочитав несколько книг по типизированном лямбда исчисление, а именно по зависимым типам, увидел интересную закономерность: везде первым примером приводится определение типа «отсортированный список». Все бы хорошо, но дальше этого определения ничего не было. Вот я и придумал восполнить этот пробел и реализовать функцию, принимающую список, и возвращающую другой список и два доказательства. Одно доказывает, что результат — это перестановка входа, а другое доказывает, что результат — отсортированный список.
Читать полностью »

Поиск кратчайшего расстояния между точками в трёхмерном пространствеСтавший уже традиционным ежемесячный конкурс по функциональному программированию в июне сего года собрал пока наибольшее количество участников с момента запуска оных конкурсов. Не знаю, что послужило причиной этого, но факт остаётся фактом — в конкурсе приняло участие 35 человек, представивших 36 решений, из которых большиинство было на языке Haskell (7 решений) и C++ (6 решений). Другими использованными языками программирования были: Assembler, C, C#, Clojure, D2, Erlang, F#, Java, Nemerle, OCaml, Perl, Python и Scala. И это очень приятно, что имеет место такая диверсификация языков и подходов.

Ну а в качестве задачи была предложена такая формулировка одной из традиционных задач для олимпиад по программированию:

Демиург задумал поместить новую разумную расу на планету во Вселенной так, чтобы она как можно быстрее освоила весь доступный космос. Для этих целей он собрал перечень всех планет, находящихся в поясе Златовласки, после чего решил найти среди них две, наиболее близко расположенные друг к другу. Разумная раса должна быть расположена на одной из таких планет. Это, по замыслу Демиурга, позволит максимально быстро обеспечить освоение космоса. Помогите Демиургу найти две планеты, находящиеся на наименьшем расстоянии друг от друга.

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

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

Всего несколько часов назад начался конкурс ICFPC-2012, который продлится все выходные. Я решил перевести задачу для этого конкурса в надежде, что кто-то из заинтересовавшихся людей успеет принять участие.

Задача вполне понятная, так что дерзайте.

Шахты с лямбдами обнаружены в Шотландии! Ваша задача — прочитав карту шахты суметь составить программу для робота.
Читать полностью »

Встреча FProg 2012 07 в Петербурге
В четверг, 12 июля 2012 года в 19:00 в петербургском офисе компании Яндекс при поддержке компании JetBrains и журнала «Практика функционального программирования» пройдёт очередная встреча FProg. Встреча состоится накануне программистского конкурса ICFP Contest 2012.

Обязательная запись на встречу для доступа в офис осуществляется на странице встречи через Twitter-аккаунт.

Темы докладов:

  • Евгений Котельников. Зависимые типы в Haskell
  • Ян Малаховски. Введение в Agda
  • Андрей Власовских. Команда spb-archlinux на ICFP Contest 2009

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

Предупреждение: если у вас есть претензии к бенчмарку и/или к коду, бенчмарк выложен на Гитхабе, что позволяет вам править баги самим или сообщить о багах автору.

Подробнее о проблеме 1000 соединений: ru.wikipedia.org/wiki/Проблема_10000_соединений

Как с проблемой 1000 соединений через вебсокеты справятся Erlang, Go, Haskell (Snap), Java (Webbit), Node.js (websocket) и Pythin (ws4py)?

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

Предупреждение: если у вас есть претензии к бенчмарку и/или к коду, бенчмарк выложен на Гитхабе, что позволяет вам править баги самим или сообщить о багах автору.

Подробнее о проблеме 10000 соединений: ru.wikipedia.org/wiki/Проблема_10000_соединений

Как с проблемой 10000 соединений через вебсокеты справятся Erlang, Go, Haskell (Snap), Java (Webbit), Node.js (websocket) и Pythin (ws4py)?

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


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