<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:ru_declarative</id>
  <title>ru_declarative</title>
  <subtitle>ru_declarative</subtitle>
  <author>
    <name>ru_declarative</name>
  </author>
  <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom"/>
  <updated>2012-05-29T03:04:32Z</updated>
  <lj:journal userid="2763946" username="ru_declarative" type="community"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://ru-declarative.livejournal.com/data/atom" title="ru_declarative"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:104000</id>
    <author>
      <name>Алексеев Александр</name>
    </author>
    <lj:poster user="afiskon" userid="17302724"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/104000.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=104000"/>
    <title>Перевод серии статей "Язык Haskell для детей"</title>
    <published>2012-05-29T03:04:32Z</published>
    <updated>2012-05-29T03:04:32Z</updated>
    <content type="html">Предлагаю вашему вниманию перевод серии статей &amp;quot;Haskell For Kids!&amp;quot; (оригинал:&amp;nbsp;&lt;a href="http://cdsmith.wordpress.com/2011/08/03/haskell-for-kids-introduction/" rel="nofollow"&gt;http://cdsm&lt;span style="display: none"&gt;&amp;nbsp;&lt;/span&gt;ith.wordpress.com/2011/08/03/haskell-for-kids-introduction/&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;На данный момент перевод выполнен на ~50%, переведено введение и первые четыре части. Ознакомиться с ним можно здесь: &lt;a href="http://it-talk.org/topic15355.html" rel="nofollow"&gt;http://it-talk.org/topic15355.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Если что, перевод не мой, им занимается &lt;a href="http://users.livejournal.com/_darkus_/"&gt;Darkus&lt;/a&gt;.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:103935</id>
    <author>
      <name>kouzdra</name>
    </author>
    <lj:poster user="kouzdra" userid="1935431"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/103935.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=103935"/>
    <title>И никто ни автору </title>
    <published>2012-05-29T03:01:34Z</published>
    <updated>2012-05-29T03:01:34Z</updated>
    <content type="html">&lt;a href="http://ivan-gandhi.livejournal.com/1990965.html"&gt;поста&lt;/a&gt; и его комменторам не разъяснил прот типы стандартные типы Array, Ix и прочее. И про то, что &lt;br /&gt;&lt;pre&gt;(Ix a, Ix b) =&amp;gt; Ix (a, b)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;И &lt;a href="http://hackage.haskell.org/packages/archive/base/4.2.0.1/doc/html/Data-Ix.html" rel="nofollow"&gt;докуметацию&lt;/a&gt; они тоже не читали.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:103503</id>
    <author>
      <name>Lev Walkin</name>
    </author>
    <lj:poster user="lionet" userid="5819576"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/103503.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=103503"/>
    <title>Взрывной шаблон</title>
    <published>2012-05-19T08:46:43Z</published>
    <updated>2012-05-19T10:43:31Z</updated>
    <content type="html">Коллеги, я в замешательстве. Блиц-опрос: как вы думаете, почему в Хаскеле такая конструкция называется "bang patterns"?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;f &lt;b&gt;!&lt;/b&gt;x -&amp;gt; "xyz"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Как лучше всего перевести на русский?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD&lt;/b&gt;: Это я к чему: в книжке, &lt;a href="http://ru-declarative.livejournal.com/103415.html"&gt;которую вчера обсуждали&lt;/a&gt;, вместо "bang = exclamation mark" целых четыре страницы (сс. 120—123) рассказывается про то, что это "взрывной шаблон" и "взрывная декомпозиция", и по поводу того, почему именно всё это взрывное (bang = взрыв): оказывается, там жопа _|_ взрывается, если восклицательный знак неё войдёт. Я не знаю, как на это реагировать.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:103415</id>
    <author>
      <name>unavella</name>
    </author>
    <lj:poster user="unavella" userid="44939527"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/103415.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=103415"/>
    <title>Новый учебник по Haskell</title>
    <published>2012-05-18T08:29:47Z</published>
    <updated>2012-05-19T20:14:46Z</updated>
    <category term="книги"/>
    <category term="haskell"/>
    <content type="html">Добрый день!&lt;br /&gt;&lt;br /&gt;Написал книгу о Haskell [1]. Учебник, от азов до среднего уровня.&lt;br /&gt;Девиз книги: просто о сложном. Много примеров, постоянное обращение&lt;br /&gt;к интерпретатору, простой язык (скорее запись речи, чем книжный стиль).&lt;br /&gt;Я бы хотел, чтобы любой желающий изучить Haskell (скорее всего, пока&lt;br /&gt;не подозревающий о haskell-cafe, ru_declarative, ru_lambda и тд) мог легко&lt;br /&gt;найти её в сети, скачать и получить удовольствие от программирования на&lt;br /&gt;Haskell. Книга состоит из пдф-файла и примеров к главам. Подскажите,&lt;br /&gt;пожалуйста, как это организовать.&lt;br /&gt;&lt;br /&gt;Антон&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="https://github.com/anton-k/ru-haskell-book" rel="nofollow" rel="nofollow"&gt;https://github.com/anton-k/ru-haskell-b&lt;wbr&gt;ook&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:103043</id>
    <author>
      <name>Max Taldykin</name>
    </author>
    <lj:poster user="zelych" userid="6807712"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/103043.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=103043"/>
    <title>В Москве работа на хаскеле</title>
    <published>2012-04-03T06:11:20Z</published>
    <updated>2012-04-03T06:11:20Z</updated>
    <content type="html">Здравствуйте.&lt;br /&gt;&lt;br /&gt;Это продолжение вот этой вакансии: &lt;a href='http://ru-declarative.livejournal.com/101630.html'&gt;http://ru-declarative.livejournal.com/101630.html&lt;/a&gt;&lt;br /&gt;Условия такие же: 40-50тр наличными, два раза в неделю нужно приехать в офис на пару часов, делаем автоматизацию колл-центра. Теперь уже это не халтурка до июня -- заказчики хотят продолжения.&lt;br /&gt;&lt;br /&gt;В прошлый раз я рискнул написать про 30 часов, не знаю сколько выходит на самом деле: сейчас один товарищ совмещает с дипломом, второй -- с основной работой.&lt;br /&gt;&lt;br /&gt;Из интересного: dsl, fts, gis, web.&lt;br /&gt;Есть ещё задачи на javascript'е: у нас декларативный интерфейс из knockout'а и backbone (&lt;a href="http://lambda-the-ultimate.org/node/4308" rel="nofollow"&gt;LtU&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Пишите на max@formalmethods.ru&lt;br /&gt;Если вы хаскеля не умеете, но очень хотите научиться -- тоже пишите.&lt;br /&gt;&lt;br /&gt;P.S. Да, увы, у нас не &lt;a href="http://www.parsci.com/Jobs" rel="nofollow"&gt;Parallel Scientific&lt;/a&gt; и не &lt;a href="http://ro-che.info/docs/internship.html" rel="nofollow"&gt;Barclays&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:102801</id>
    <author>
      <name>Eugene Kirpichov</name>
    </author>
    <lj:poster user="antilamer" userid="1593618"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/102801.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=102801"/>
    <title>Клуб юных функциональщиков</title>
    <published>2012-03-06T13:40:20Z</published>
    <updated>2012-03-06T13:40:20Z</updated>
    <content type="html">В среду, 14 марта в 19:00 в офисе компании Яндекс в Санкт-Петербурге пройдет очередная встреча SPbHUG. &lt;br /&gt;&lt;br /&gt;Место: Свердловская наб. 44, бизнес-центр Бенуа.&lt;br /&gt;&lt;br /&gt;Добраться можно:&lt;br /&gt;* от м.Площадь Ленина на бесплатном автобусе "Теорема" - дальняя левая сторона площади Ленина, если смотреть от финляндского вокзала&lt;br /&gt;* от м.Новочеркасская на маршрутке №6&lt;br /&gt;&lt;br /&gt;Темы докладов:&lt;br /&gt;* Антон Ланцов. Гонки на Эрланге&lt;br /&gt;* Борис Беркгаут. Haskell в авиатренажерах</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:102608</id>
    <author>
      <name>Anton Salikhmetov</name>
    </author>
    <lj:poster user="codedot" userid="11832244"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/102608.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=102608"/>
    <title>Универсальные системы взаимодействия</title>
    <published>2012-02-04T19:07:13Z</published>
    <updated>2012-02-05T19:15:11Z</updated>
    <content type="html">Известно, что &lt;a href="http://en.wikipedia.org/wiki/Interaction_nets"&gt;система взаимодействия&lt;/a&gt; на основе комбинаторов {γ, δ, ε} со следующими &lt;a href="http://codedot.livejournal.com/132364.html"&gt;правилами&lt;/a&gt; универсальна в том смысле, что может симулировать любую другую систему взаимодействия:&lt;br /&gt;&lt;br /&gt;γ[δ(a, b), δ(c, d)] &amp;gt;&amp;lt; δ[γ(a, c), γ(b, d)];&lt;br /&gt;δ[x, y] &amp;gt;&amp;lt; δ[x, y], γ[x, y] &amp;gt;&amp;lt; γ[y, x];&lt;br /&gt;ε &amp;gt;&amp;lt; γ[ε, ε], ε &amp;gt;&amp;lt; δ[ε, ε], ε &amp;gt;&amp;lt; ε.&lt;br /&gt;&lt;br /&gt;Чтобы показать универсальность произвольной системы, достаточно предоставить три сети внутри нее, которые бы заменяли комбинаторы {γ, δ, ε}, сохраняя все возможные их взаимодействия.&lt;br /&gt;&lt;br /&gt;Рассмотрим другую систему взаимодействия с агентами типов {ξ, φ, ψ, ε}, где ξ бинарен, а φ и ψ — унарны. При этом зафиксируем некоторые правила:&lt;br /&gt;&lt;br /&gt;φ[a] &amp;gt;&amp;lt; ξ[a, ε], ψ[a] &amp;gt;&amp;lt; ξ[ε, a];&lt;br /&gt;ε &amp;gt;&amp;lt; ξ[ε, ε], ε &amp;gt;&amp;lt; φ[ε], ε &amp;gt;&amp;lt; ψ[ε].&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Задача:&lt;/b&gt; найти такие правила ξ &amp;gt;&amp;lt; ξ, φ &amp;gt;&amp;lt; φ, φ &amp;gt;&amp;lt; ψ и ψ &amp;gt;&amp;lt; ψ и сети в {ξ, φ, ψ, ε}, заменяющие γ и δ, чтобы система была универсальна.&lt;br /&gt;&lt;br /&gt;Симулировать аннигиляции γ &amp;gt;&amp;lt; γ и δ &amp;gt;&amp;lt; δ нетрудно: достаточно выбрать ξ[ξ(a, b), ξ(c, d)] &amp;gt;&amp;lt; ξ[ξ(a, c), ξ(b, d)] и положить γ(x, y) = ξ(φ(x), ψ(y)) и δ(x, y) = ξ(ψ(x), φ(y)). Однако с дублированием γ &amp;gt;&amp;lt; δ дело обстоит сложнее.&lt;br /&gt;&lt;br /&gt;Был бы признателен за помощь в решении данной задачи.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:102234</id>
    <author>
      <name>rastafarra</name>
    </author>
    <lj:poster user="rastafarra" userid="10182490"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/102234.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=102234"/>
    <title>ru_declarative @ 2011-11-24T11:58:00</title>
    <published>2012-02-02T07:27:17Z</published>
    <updated>2012-02-02T07:27:17Z</updated>
    <category term="tui"/>
    <category term="ocaml"/>
    <category term="curses"/>
    <content type="html">давным давно я написал небольшую библиотеку виджетов на ocaml и ncurses.  тогда же хотел поделиться, да все руки не доходили...&lt;br /&gt;&lt;br /&gt;теперь вот делюсь, может быть кому-то будет полезна: &lt;a href='http://hg.smolex.com/ocaml-curses-widgets/summary' rel='nofollow'&gt;http://hg.smolex.com/ocaml-curses-widgets/summary&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;что умеет: держать screen, в нем рисовать виджеты, обновлять их содержимое по необходимости, следить за вводом с клавиатуры.&lt;br /&gt;из виджетов есть кнопка, лейбл, чекбокс, комбобокс, поле ввода, несколько диалоговых окон, лист, таблица (правда она так себе, показывает только текст). события, подписка на, все как у взрослых.&lt;br /&gt;&lt;br /&gt;там же, рядом, есть небольшой генератор форм. в sexp-ах описывается форма, на нее натравливается генератов, из выхлопа получается форма с виджетом и именем. нужна такая штука из-за того, что у меня не сделаны лайауты, приходится виджеты расставлять руками по координатам и задавать им размеры. с одной стороны не фонтан, да. с другой стороны эта штука писалась для использования во всяком ембедете, чтобы к железке можно было отратиться через rs232 и увидеть +/- вменяемый тпи (текстовый пользовательский интерфейс), там плавать особо нечему, мне генерилки было вполне достаточно.&lt;br /&gt;&lt;br /&gt;для сборки нужен elib, тоже собственного производства, лежит рядом, в отдельном репозиратии.&lt;br /&gt;&lt;br /&gt;зы. почему не выложил на тот же битбакет? потому что у меня вот прям щас он почему-то недоступен, а если отложу выкладывание на потом, запал может кончиться :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:102086</id>
    <author>
      <email>a2alt@ya.ru</email>
      <name>si14</name>
    </author>
    <lj:poster user="si14" userid="9505258"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/102086.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=102086"/>
    <title>Вакансия</title>
    <published>2012-02-02T07:26:38Z</published>
    <updated>2012-02-02T07:26:38Z</updated>
    <content type="html">Оригинал взят у &lt;span class='ljuser ljuser-name_si14' lj:user='si14' style='white-space:nowrap'&gt;&lt;a href='http://si14.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.gif?v=92.2' alt='[info]' width='16' height='16' style='vertical-align: bottom; border: 0; padding-right: 1px;'/&gt;&lt;/a&gt;&lt;a href='http://si14.livejournal.com/'&gt;&lt;b&gt;si14&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; в &lt;a href="http://si14.livejournal.com/19665.html"&gt;Вакансия&lt;/a&gt;&lt;div&gt;Товарищи! Наша &lt;a href="http://selectel.ru"&gt;компания&lt;/a&gt; ищет программистов на Haskell&amp;#39;е на фуллтайм. Личное присутствие в офисе (Петербург, ст.м. Московские Ворота) обязательно. Как обычно, ДМС и прочие плюшки в комплекте. Зарплаты обсуждаем лично. Приходите, поговорим.&lt;br /&gt;&lt;br /&gt;UPD: письма лучше писать на office@selectel.ru :)&lt;/div&gt;&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:101788</id>
    <author>
      <name>ankalagonblack</name>
    </author>
    <lj:poster user="ankalagonblack" userid="7726292"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/101788.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=101788"/>
    <title>асинхронные изменения</title>
    <published>2012-01-16T06:48:05Z</published>
    <updated>2012-01-16T06:48:05Z</updated>
    <content type="html">Здравствуйте.&lt;br /&gt;&lt;br /&gt;У меня возник вопрос по Haskell. Допустим, я хочу разработать многопользовательскую игру, где игроки асинхронно вносят изменения в мир. Меня интересует, где в таком случае хранится мир, ведь он может существовать только внутри некоторого вычисления, а в чисто функциональных языках, вроде как вычисления изолированны-друг-от-друга, следовательно игроки не смогут этот мир менять. Как разобраться с этой проблемой? Буду благодарен, если будет указанно направление, куда копать.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:101630</id>
    <author>
      <name>Max Taldykin</name>
    </author>
    <lj:poster user="zelych" userid="6807712"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/101630.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=101630"/>
    <title>Работа на хаскеле в Москве</title>
    <published>2011-12-09T12:28:42Z</published>
    <updated>2011-12-09T12:51:33Z</updated>
    <content type="html">Здравствуйте.&lt;br /&gt;&lt;br /&gt;В конторе где я подрабатываю есть вакансия.&lt;br /&gt;Проект связан с автоматизацией работы колл-центра. Там будут&lt;br /&gt;веб-технологии, вся серверная часть на хаскеле.&lt;br /&gt;Ключевые слова: snapframework, redis, postgresql.&lt;br /&gt;&lt;br /&gt;Условия:&lt;br /&gt; - работа начинается в январе-феврале, заканчивается в июне;&lt;br /&gt; - 40-50тр в месяц на руки;&lt;br /&gt; - график работы свободный, нужно быть несколько раз в неделю в офисе (на Шаболовке) для совещаний;&lt;br /&gt; - предполагается, что вы будете тратить ~30 часов в неделю на проект; &lt;br /&gt; - увы, личное присутствие обязательно, удалёнка не рассматривается.&lt;br /&gt;&lt;br /&gt;От работника требуется писать аккуратный человекопонятный код (большая&lt;br /&gt;часть исходников будет выложена под BSD).&lt;br /&gt;Приветствуется опыт автоматизации бизнес-процессов, знание сетевых и&lt;br /&gt;веб-технологий.&lt;br /&gt;&lt;br /&gt;Если интересно, напишите немножко о себе на jobs@formalmethods.ru (не&lt;br /&gt;забудтье приложить ссылки на свои блоги, github'ы, ohloh,&lt;br /&gt;stackoverflow итп).&lt;br /&gt;&lt;br /&gt;&lt;small&gt;Btw, есть ещё вакансия на javascript и вёрстку&lt;/small&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:101375</id>
    <author>
      <email>mpotanin@gmail.com</email>
      <name>Mike Potanin</name>
    </author>
    <lj:poster user="potan" userid="855511"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/101375.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=101375"/>
    <title>Неожиданный "побочный" эффект.</title>
    <published>2011-11-01T10:55:04Z</published>
    <updated>2011-11-01T12:48:34Z</updated>
    <category term="memoize"/>
    <content type="html">Решил переделать одну программу на мемоизацию. И неожиданно получил всесто правильных 87089689052447182841791388989051400978432 странное число -669965290.&lt;br /&gt;Ну кто додумался описать &lt;b&gt;(!!) :: [a] -&amp;gt; Int -&amp;gt; a&lt;/b&gt;???&lt;br /&gt;&lt;br /&gt;Кстати, для Data.Function.Memoize какой ghc нужен? В 6.12.3 его нет.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:101096</id>
    <author>
      <name>kouzdra</name>
    </author>
    <lj:poster user="kouzdra" userid="1935431"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/101096.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=101096"/>
    <title>Постфункциональное программирование:</title>
    <published>2011-10-23T07:09:37Z</published>
    <updated>2011-10-23T10:10:58Z</updated>
    <content type="html">Подумалось тут - чем хороша функциональщина - что наконец под языками появилась строгая и гибкая семантика, что резко расширяет возможности и языкового дизайна и программирования, чем плоха - читаемость кода на том же хаскеле мне лично более всего напоминает читаемость ассмеблерного или фортового кода. С другой стороны - а что мешает плюнуть на "чистоту синтаксической идеи" и начать "отматывать" синтаксис обратно к "нормальным языкам" - не везде естественно, а только там где это можно сделать удобно и без нарушения семантики: что-то типа вместо&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;let (_, y) = foldl (\((x,y), elem) -&amp;gt; ...) (x, 0) [...] in y&lt;/pre&gt;&lt;br /&gt;писать что-то вроде:&lt;br /&gt;&lt;pre&gt; for [x, y = 0] (elem in [...]) do 
   x := max (x, elem), y := y + x 
done;
    ...
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;С подразумеваемой трансляцией именно в fold&lt;br /&gt;&lt;br /&gt;PS: То есть не это более всего напоминает скобкопоклонничество в Lisp - при том, что ни на фиг н нужно и сам Маккарти-то как раз планировал более читабельный (за счет именно разнообразия) синтаксис.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:100826</id>
    <author>
      <name>beroal</name>
    </author>
    <lj:poster user="beroal" userid="4821330"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/100826.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=100826"/>
    <title>проверить алгебраический тип данных</title>
    <published>2011-10-12T20:25:40Z</published>
    <updated>2011-10-12T20:25:40Z</updated>
    <category term="haskell"/>
    <content type="html">Чтобы проверить, что алгебраический тип данных имеет только 1 конструктор с 1 аргументом, что можно использовать — Template Haskell, Data.Generics?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:100456</id>
    <author>
      <name>kouzdra</name>
    </author>
    <lj:poster user="kouzdra" userid="1935431"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/100456.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=100456"/>
    <title>Xmonad</title>
    <published>2011-10-08T06:37:50Z</published>
    <updated>2011-10-08T06:37:50Z</updated>
    <content type="html">А никто с xmonad не игрался? А то под влиянием разговоров о животворящей силе оконного интерфейса созрел чтобы посмотреть чт бывает кроме - и в общем нашел - Ion и XMonad+BlueTile и то и то близко к но не совсем - потому по его layout's и т.п. в xmonad - чтобы его подковырять в требуемом плане.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:100257</id>
    <author>
      <name>kouzdra</name>
    </author>
    <lj:poster user="kouzdra" userid="1935431"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/100257.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=100257"/>
    <title>про кэширование рекурсивных функций:</title>
    <published>2011-08-09T12:48:32Z</published>
    <updated>2011-08-09T12:48:32Z</updated>
    <category term="ocaml"/>
    <content type="html">В процессе поигранок с той же &lt;a href="sasha-gil.livejournal.com/39935.html"&gt;задачкой&lt;/a&gt; я поигрался естественно с кэшированием значений функции. Довольно очевидно, что на самом деле ее сложность n&amp;sup2; (для кэша достаточно матрицы n&amp;times;n, даже половинки), но мне стало интересно нарисовать "общее решение" - функцию, которая кэширует любую рекурсивную функцию. Получилось немножко через жопу, но забавно: &lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;Как сделать оборачивалку функции в кэшик понятно - &lt;br /&gt;&lt;pre&gt;let memo fn = 
   let tab = Hashtbl.create 47 in
   fun arg -&amp;gt;
    try Hashtbl.find tab arg with 
      Not_found -&amp;gt; let res = fn arg in Hashtbl.add tab arg res; res
&lt;/pre&gt;Но у нас функция рекурсивная:&lt;br /&gt;&lt;pre&gt;let rec count (n, m) =
      if n = m then 1
      else if n &amp;lt; m then 0
      else count (n - m, m) + count (n, m+1)
&lt;/pre&gt;Понятно, что &lt;tt&gt;memo count&lt;/tt&gt; работать будет - а вот кэшировать рекурсивные вызовы не будет и что в таком виде ничего не сделаешь. Надо что-то менять. Можно вспомнить, что мешающая нам рекурсия вовсе не является такой уж фундаментальной вещью и есть такая штука - &lt;a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80_%D0%BD%D0%B5%D0%BF%D0%BE%D0%B4%D0%B2%D0%B8%D0%B6%D0%BD%D0%BE%D0%B9_%D1%82%D0%BE%D1%87%D0%BA%D0%B8" rel="nofollow"&gt;Y-комбинатор&lt;/a&gt;, который реализует рекурсию подавая функцию ей же на вход первым параметром:&lt;br /&gt;&lt;pre&gt;let rec y fn arg = fn (y fn) arg
&lt;/pre&gt;Переписываем функцию в виде пригодном для его употребления:&lt;br /&gt;&lt;pre&gt;
let count count' (n, m) =
      if n = m then 1
      else if n &amp;lt; m then 0
      else count' (n - m, m) + count' (n, m+1)
&lt;/pre&gt;&lt;tt&gt;y count n&lt;/tt&gt; у нас считает тоже самое, что &lt;tt&gt;count_rec n&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Остается последний шаг - превратить Y-комбинатор в кэширующий Y-комбинатор:&lt;br /&gt;&lt;pre&gt;let rec memo fn = 
   let tab = Hashtbl.create 1000_000 in
   let rec fn' arg =
    try Hashtbl.find tab arg with 
      Not_found -&amp;gt; let res = fn fn' arg in Hashtbl.add tab arg res; res
   in fn'
&lt;/pre&gt;Ну и теперь &lt;tt&gt;memo count&lt;/tt&gt; и есть то, что нам надо. Написав простенкий тестик:&lt;br /&gt;&lt;pre&gt;
let run fn n = 
    let start = Sys.time () in
    let res = fn  (n, 1) in
    printf "n=%d cnt=%d time=%f\n" n res (Sys.time () -. start); flush stdout

let _ = 
    run count_rec 110;
    run (   y count) 110;
    run (memo count) 110
&lt;/pre&gt;Имеем на выходе:&lt;br /&gt;&lt;pre&gt;make -k 
ocamlopt -inline 9 nums.cmxa -rectypes gil.ml -o gil
./gil
n=110 cnt=607163746 time=71.000437
n=110 cnt=607163746 time=227.194198
n=110 cnt=607163746 time=0.008001
&lt;/pre&gt;Что можно сказать по этому поводу - оверхед от Y весьма преизрядный, от memo, понятное дело не меньше - но даже в таком лобовом исполнении ее применение более чем оправдано, а применяется оно сугубо механически.&lt;br /&gt;&lt;br /&gt;Впрочем расписывание руками будет эффективнее, но не так поучительно.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:99853</id>
    <author>
      <name>Anton Salikhmetov</name>
    </author>
    <lj:poster user="codedot" userid="11832244"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/99853.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=99853"/>
    <title>Вопрос об оптимальности TRS</title>
    <published>2011-06-28T16:34:07Z</published>
    <updated>2011-07-04T10:12:19Z</updated>
    <content type="html">Рассмотрим следующую TRS (term rewriting system), перечислив её правила в порядке убывания приоритета:&lt;br /&gt;&lt;br /&gt;1) (λx.x) M → M;&lt;br /&gt;2) (λx.M) N → M, x ∉ FV(M);&lt;br /&gt;3) (λx.M N) P → M ((λx.N) P), x ∉ FV(M);&lt;br /&gt;4) (λx.λy.M) N → λy.(λx.M) N;&lt;br /&gt;5) λx.M x → M, x ∉ FV(M);&lt;br /&gt;&lt;br /&gt;6) (λx.M N) (λy.P) → (λp.(λx.C[p Q]) p) (λy.P), x ∈ FV(M), x ∈ FV(N), M N = C[x Q], p ∉ FV(M N).&lt;br /&gt;&lt;br /&gt;Нормализующая стратегия для данной TRS заключается в выборе редексов большего приоритета, а в случае совпадающего приоритета — выбор внутреннего спинного редекса, который гарантирует нормализацию для дистрибутивной редукции. Критичным с точки зрения приоритета является лишь выбор правил (1)–(5) перед (6).&lt;br /&gt;&lt;br /&gt;Был бы очень признателен за помощь в доказательстве или опровержении оптимальности по Леви полученной редукции.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:99824</id>
    <author>
      <name>Notes of a degraded "slave-holder"</name>
    </author>
    <lj:poster user="raydac" userid="11465707"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/99824.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=99824"/>
    <title>парсер Prolog на Java</title>
    <published>2011-06-26T20:50:27Z</published>
    <updated>2011-06-26T20:50:27Z</updated>
    <category term="prolog"/>
    <category term="java"/>
    <content type="html">&lt;font size="2"&gt;вынес в отдельный проект и опубликовал под LGPL свой  парсер prolog'а на Java, позволяет распарсить исходники написанные в  эдинбургском стиле и построить деревья объектов. Страница проекта  расположена по адресу &lt;a target="_blank" href="http://code.google.com/p/java-prolog-parser" rel="nofollow"&gt;http://code.google.com/p/java-prolog-parser&lt;/a&gt;&lt;/font&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:99454</id>
    <author>
      <name>Anton Salikhmetov</name>
    </author>
    <lj:poster user="codedot" userid="11832244"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/99454.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=99454"/>
    <title>Дистрибутивная нерекурсивная стратегия</title>
    <published>2011-06-01T11:09:53Z</published>
    <updated>2011-06-01T16:11:11Z</updated>
    <content type="html">Ниже приводится описание неэффективной стратегии для &lt;a href="http://pygx.sourceforge.net/innerspine.pdf"&gt;дистрибутивного λ-исчисления&lt;/a&gt;, которая зависит от истории вычисления, а не только от самого выражения в текущем его состоянии. Интересует проверка нормализующего свойства данной стратегии, а также её корректировка в случае отрицательного ответа.&lt;br /&gt;&lt;br /&gt;Для любого лямбда-выражения Expr с произвольным разделением подвыражений начальное состояние списка (возможных) редексов R = ρ(Expr) строится следующим образом (здесь операция «•» обозначает конкатенацию списков, а n ≥ 0, что может приводить к пустым спискам при n = 0):&lt;br /&gt;&lt;br /&gt;ρ(x N&lt;sub&gt;1&lt;/sub&gt; … N&lt;sub&gt;n&lt;/sub&gt;) = ρ(N&lt;sub&gt;1&lt;/sub&gt;) • … • ρ(N&lt;sub&gt;n&lt;/sub&gt;);&lt;br /&gt;ρ((λx.M) N&lt;sub&gt;1&lt;/sub&gt; … N&lt;sub&gt;n&lt;/sub&gt;) = [(λx.M) N&lt;sub&gt;1&lt;/sub&gt;, … , (λx.M) N&lt;sub&gt;1&lt;/sub&gt; … N&lt;sub&gt;n&lt;/sub&gt;] • ρ(M) • ρ(N&lt;sub&gt;1&lt;/sub&gt;) • … • ρ(N&lt;sub&gt;n&lt;/sub&gt;).&lt;br /&gt;&lt;br /&gt;В процессе вычисления данный список проходят от начала до конца, удаляя его голову на каждом шаге, до тех пор, пока он не окажется пустым. При этом начало или конец списка определенным образом дополняется в зависимости от применяемого правила дистрибутивного лямбда-исчисления в следующих трёх случаях:&lt;br /&gt;&lt;br /&gt;1) (λx.x) M → M, после чего R := [M] • R;&lt;br /&gt;2) (λx.λy.M) N → λy.(λx.M) N, после чего R := [(λx.M) N] • R;&lt;br /&gt;3) (λx.M&lt;sub&gt;1&lt;/sub&gt; M&lt;sub&gt;2&lt;/sub&gt;) N → (λx.M&lt;sub&gt;1&lt;/sub&gt;) N ((λx.M&lt;sub&gt;2&lt;/sub&gt;) N), после чего R := [(λx.M&lt;sub&gt;1&lt;/sub&gt;) N, (λx.M&lt;sub&gt;1&lt;/sub&gt;) N ((λx.M&lt;sub&gt;2&lt;/sub&gt;) N)] • R • [(λx.M&lt;sub&gt;2&lt;/sub&gt;) N], причём подвыражение N разделяется.&lt;br /&gt;&lt;br /&gt;Итак, требуется доказать или опровергнуть, что для любого лямбда-выражения, имеющего нормальную форму, вычисление остановится, и результатом будет его нормальная форма. Был бы очень признателен за помощь в решении данной задачи.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:99170</id>
    <author>
      <name>Gabriel</name>
    </author>
    <lj:poster user="gabriel_irk" userid="8974847"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/99170.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=99170"/>
    <title>Кто хочет написать что-нибудь этакое?</title>
    <published>2011-04-11T14:25:26Z</published>
    <updated>2011-04-11T22:52:49Z</updated>
    <content type="html">У нас есть классные идеи! :)&lt;br /&gt;&lt;br /&gt;Мы разрабатываем интеллектуальную электронную обучающую среду.&lt;br /&gt;Это значит - хотим применить методы ИИ (и прочей интеллектуализации)&lt;br /&gt;для создания виртуального пространства, в котором обучающимся будет&lt;br /&gt;по-настоящему удобно и интересно учиться, а преподавателям - удобно&lt;br /&gt;и интересно учить.&lt;br /&gt;&lt;br /&gt;Мы - максималисты. Нам не интересна и не нужна (а кому нужна?)&lt;br /&gt;очередная поделка типа учебник в виде HTML с тестами. Мы хотим&lt;br /&gt;систему, с которой можно ВЗАИМОдействовать.&lt;br /&gt;&lt;br /&gt;У нас есть куча идей, а программистов почти нет.&lt;br /&gt;И всё же, мы ищем сотрудничества с теми, кто любит и умеет&lt;br /&gt;генерировать собственные идеи, а потом превращать их в программы.&lt;br /&gt;&lt;br /&gt;Мы пишем под JVM, преимущественно - на Java. Есть немного на Scala.&lt;br /&gt;А вообще, язык программирования нас не волнует.&lt;br /&gt;&lt;br /&gt;Если Вы заинтересовались этой темой, хотите внести вклад в становление&lt;br /&gt;нового поколения систем электронного обучения, у Вас чешутся руки&lt;br /&gt;запрограммировать нетривиальную систему на любимом или только что&lt;br /&gt;выученном языке - будем рады сотрудничать!&lt;br /&gt;&lt;br /&gt;Мы пишем open source код под Apache (помнится) license.&lt;br /&gt;&lt;br /&gt;Разработки ведутся на базе Казанского Государственного Технического&lt;br /&gt;Университета (КАИ) и Института Проблем Управления РАН (Москва).&lt;br /&gt;&lt;br /&gt;(crosspost)&lt;br /&gt;&lt;br /&gt;UPD. Репозитории с кое-какими примерами.&lt;br /&gt;&lt;br /&gt;&lt;a href='https://bitbucket.org/Bulat/lotus1' rel='nofollow'&gt;https://bitbucket.org/Bulat/lotus1&lt;/a&gt;&lt;br /&gt;&lt;a href='https://bitbucket.org/Bulat/repltasks' rel='nofollow'&gt;https://bitbucket.org/Bulat/repltasks&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:98960</id>
    <author>
      <name>Dire Bunny</name>
    </author>
    <lj:poster user="diam_2003" userid="1359384"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/98960.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=98960"/>
    <title>ru_declarative @ 2011-02-11T17:09:00</title>
    <published>2011-02-11T14:09:24Z</published>
    <updated>2011-02-11T18:54:03Z</updated>
    <content type="html">Думаю, чего бы такого пощупать в плане самообразования в языковой области в этом году.&lt;br /&gt;Знаю и умею CommonLisp / Haskell / F# / Nemerle. Scala тоже знаю, но не люблю.&lt;br /&gt;Пока что напрашивается ответ "Clojure".&lt;br /&gt;&lt;br /&gt;Но, может быть, я в силу своей зашоренности упускаю какой-нибудь хот топик?&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;Некоторую достаточно старую "экзотику" (типа Factor, Mercury, ...) тоже более-менее щупал в разное время.&lt;br /&gt;Интересует, скажем так, новьё. Свежачок. Мякотка.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:98635</id>
    <author>
      <name>interspecies police</name>
    </author>
    <lj:poster user="pirson" userid="481188"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/98635.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=98635"/>
    <title>"Практика функционального программирования": Есть шестой, можно заказать все номера</title>
    <published>2010-12-08T11:18:13Z</published>
    <updated>2010-12-08T11:23:06Z</updated>
    <content type="html">Уважаемые господа!&lt;br /&gt;&lt;br /&gt;1. Осталось еще некоторое количество экземпляров 6-го номера "ПФП" по цене 99 рублей.&lt;br /&gt;&lt;br /&gt;Красивые фотографии напечатанного журнала (кликабельно!).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://farm6.static.flickr.com/5128/5240519463_d3cb0796e8_b.jpg" rel="nofollow"&gt;&lt;img src="http://farm6.static.flickr.com/5128/5240519463_d3cb0796e8_m.jpg"&gt;&lt;/a&gt;  &lt;a href="http://farm6.static.flickr.com/5002/5241115832_f8aafa1151_b.jpg" rel="nofollow"&gt;&lt;img src="http://farm6.static.flickr.com/5002/5241115832_f8aafa1151_m.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Все заказывается на &lt;a href='http://samizdal.ru/fprog' rel='nofollow'&gt;http://samizdal.ru/fprog&lt;/a&gt;.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Способы получить журнал, если кого-то запутал наш интерфейс:&lt;br /&gt;&lt;br /&gt;- Выбрать опцию "самовывоз", приехать в &lt;a href="http://samizdal.ru/contacts" rel="nofollow"&gt;наш офис на Калужской&lt;/a&gt; с 10 до 18, или в офис &lt;a href="http://www.undev.ru" rel="nofollow"&gt;Undev.Ru&lt;/a&gt; на Кропоткинской с 11 до 20. Выдать 99 рублей, получить свой журнал и чашку чая. &lt;br /&gt;- Вообще получить журнал можно как угодно, в том числе встретившись со мной в центре Москвы в выходные, если вам неудобно в рабочие.&lt;br /&gt;- Заказать почтовую доставку. По России 100 рублей, за границу около 200. Мы высылаем все заказной бандеролью, что дает возможность трекинга по сайту &lt;a href='http://russianpost.ru' rel='nofollow'&gt;http://russianpost.ru&lt;/a&gt;.&lt;br /&gt;- Заказать курьера в пределах МКАД. &lt;br /&gt;&lt;br /&gt;Если у вас возникают технические проблемы любого характера, пожалуйста, пишите мне - maria.hertz@samizdal.ru, и я приму у вас платеж в частном порядке. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Кроме этого! &lt;b&gt;Теперь можно заказать все номера журнала "Практика функционального программирования" с начала его выхода.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Цена любого номера - 200 рублей&lt;/b&gt;, мы собираем заказы, чтобы понять, каким тиражом печатать. Если хотите заказать, пожалуйста, пишите мне - maria.hertz@samizdal.ru, иначе вам может не хватить.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Сразу после релиза у нас в течение полутора часов были неполадки с системой оплаты. Все заказы мы получили и выслали. Но некоторые люди из-за того, что им была выдана ошибка, оплатили два раза. Им был сделан возврат денег, но из-за особенностей платежной системы деньги будут возвращаться в течение месяца.&lt;br /&gt;&lt;br /&gt;К сожалению, мы никак не можем на повлиять на скорость возврата. Но &lt;b&gt;мы готовы всем, кто пострадал, по ошибке сделав платеж больше одного раза, выслать любой из предыдущих номеров в подарок&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. Если кто-то уже заказал и получил журнал, &lt;b&gt;огромная просьба оставить отзывы по качеству печати&lt;/b&gt; тут: &lt;a href='http://community.livejournal.com/fprog/17947.html'&gt;http://community.livejournal.com/fprog/17947.html&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:98257</id>
    <author>
      <name>Eugene Kirpichov</name>
    </author>
    <lj:poster user="antilamer" userid="1593618"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/98257.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=98257"/>
    <title>Практика Функционального Программирования - номер 6</title>
    <published>2010-11-30T12:39:08Z</published>
    <updated>2010-11-30T12:44:47Z</updated>
    <content type="html">Вышел в свет &lt;a href="http://fprog.ru/2010/issue6/" rel="nofollow"&gt;6й номер&lt;/a&gt; журнала «&lt;a href="http://fprog.ru/" rel="nofollow"&gt;Практика Функционального Программирования&lt;/a&gt;».&lt;br /&gt;&lt;br /&gt;&lt;a href="http://community.livejournal.com/fprog/17124.html"&gt;Обсуждение&lt;/a&gt; номера и отдельных статей.&lt;br /&gt;&lt;h3&gt;Содержание&lt;/h3&gt; &lt;br /&gt;Гвоздь номера — эксклюзивные интервью с титанами функционального мира, создателями языков Haskell и Erlang: Саймон Пейтон Джонс и Джо Армстронг делятся мыслями и отвечают на вопросы о своих детищах и обо всем остальном, от работы в Microsoft Research до творчества Тарковского.&lt;br /&gt;&lt;br /&gt;Также в программе:&lt;br /&gt;&lt;ul style="list-style-type: circle; margin-left: 2em;"&gt;&lt;li&gt;Для тех, для кого «web scale» — не пустой звук — смертельная битва между Erlang и node.js, организованная Дмитрием Демещуком;&lt;/li&gt; &lt;br /&gt;&lt;li&gt;Для тех, кто испытывает противоречивые чувства по отношению к Java — обзор языка Scala от Влада Патрышева;&lt;/li&gt; &lt;br /&gt;&lt;li&gt;Для тех, кто неравнодушен к растительному миру и абстрактной алгебре — ознакомление с алгоритмическим творчеством Дэна Пипони (создателя спецэффектов ко всем трем «Матрицам» и бога Haskell) и его развитие в статье Евгения Кирпичёва.&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;Печатный номер&lt;/h3&gt; &lt;br /&gt;Благодаря сотрудничеству с издательством &lt;a href="http://samizdal.ru" rel="nofollow"&gt;Самиздал&lt;/a&gt; и ведущему рекламодателю &lt;a href="http://undev.ru" rel="nofollow"&gt;Undev&lt;/a&gt;, теперь журнал существует и в печатном виде.&amp;lt;/p&amp;gt;&lt;p&gt;Стоимость первых 200 экземпляров — 99 рублей, остальных — 200. Получить журнал можно самовывозом или доставкой по Москве и России — подробности &lt;a href="http://samizdal.ru/fprog/" rel="nofollow"&gt;на сайте издателя&lt;/a&gt;.&lt;br /&gt;&lt;h3&gt;Библиотечка ПФП&lt;/h3&gt; &lt;br /&gt;Кроме того, запущен проект «&lt;a href="http://fprog.ru/lib" rel="nofollow"&gt;Библиотечка ПФП&lt;/a&gt;». Его цель — заполнить пробелы в существовании русскоязычных переводов классических статей-«жемчужин» из области функционального программирования и других областей.&lt;br /&gt;&lt;br /&gt;В первом выпуске — перевод статьи Ерона Фоккера «Систематическое конструирование однокомбинаторного базиса для λ-термов».</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:97808</id>
    <author>
      <email>berkgaut@gmail.com</email>
      <name>Беркгаут</name>
    </author>
    <lj:poster user="behrk" userid="653601"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/97808.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=97808"/>
    <title>Yampa вне IO, anyone?</title>
    <published>2010-11-26T13:36:55Z</published>
    <updated>2010-11-26T13:39:33Z</updated>
    <content type="html">Господа, я понимаю, что вопрос довольно специальный, но всё же: не приходилось ли кому-нибудь использовать &lt;a href="http://www.haskell.org/yampa/" rel="nofollow"&gt;Yampa&lt;/a&gt; (хаскельная библиотека для Functional Reactive Programming) не стандартным для нее образом (в соусе из IO и IORef), а в "чистом" коде. Я хочу интегрировать Yampa в уже существующий проект, в котором уже есть код для хранения состояния и кручения цикла событий, так что от Yampa мне требуется нечто вроде state-&amp;gt;dt-&amp;gt;state в чистом виде</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ru_declarative:97544</id>
    <author>
      <name>nikolay_msk</name>
    </author>
    <lj:poster user="nikolay_msk" userid="14319461"/>
    <link rel="alternate" type="text/html" href="http://ru-declarative.livejournal.com/97544.html"/>
    <link rel="self" type="text/xml" href="http://ru-declarative.livejournal.com/data/atom/?itemid=97544"/>
    <title>ru_declarative @ 2010-11-07T17:16:00</title>
    <published>2010-11-07T14:16:32Z</published>
    <updated>2010-11-07T14:16:32Z</updated>
    <category term="data structures"/>
    <category term="haskell"/>
    <category term="recursive structures"/>
    <category term="recursive types"/>
    <content type="html">Знатоки Haskell, подскажите, пожалуйста, как описать структуру данных Shape (геом. фигура), которая удовлетворяет следующим условиям:&lt;br /&gt;&lt;br /&gt;1. Shape может являться геом. точкой (Point), состоящей из&amp;nbsp;пары числовых координат.&lt;br /&gt;2. Shape может являться ломаной линией (Polyline), состоящей из списка точек (Point).&lt;br /&gt;3. Shape может являться совокупностью (списком) других Shape'ов, *возможно, разных*.&lt;br /&gt;&lt;br /&gt;Первое, что пришло в голову, это нечто подобное:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;data Shape = Point Int Int | Polyline [Point] | Shape [Shape]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;По понятным причинам это определение не работоспособно, из-за конструкции Polyline [Point], т.к. Point лишь конструктор, а не тип данных, насколько я понимаю.&amp;nbsp;В списке рассылки Haskell Beginners мне порекомендовали записать это определение следующим образом:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;type Point = (Int, Int)&lt;br /&gt;data Shape = Point Point | Polyline [Point] | Shape [Shape]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Несмотря на то, что оно работоспособно, очевидно, что это &amp;quot;костыль&amp;quot;, ибо ломаные теперь можно определить через список любых пар целых: Polyline [(1, 2), (3, 4)]. Но хочется, чтобы было ограничение на уровне системы типов, которое *принуждало* конструировать ломаные только через список точек (Point), иными словами, через полноценный тип, а не синоним: Polyline [Point 1 2, Point 3 4]. Не каждая пара целых, в конце концов, является геом. точкой.&lt;br /&gt;&lt;br /&gt;Причем, в ООП, насколько я понимаю, это моделируется достаточно легко, а система типов следит, чтобы фигуры не было возможно сконструировать из неподобающих объектов&amp;nbsp;(пример на Scala):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;abstract class BaseShape&lt;br /&gt;class Point(x: Int, y: Int) extends BaseShape&lt;br /&gt;class Polyline(points: List[Point]) extends BaseShape&lt;br /&gt;class Shape(shapes: List[BaseShape]) extends BaseShape&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Как сделать похожее в Haskell? Через GADT, классы типов, переменные типов,&amp;nbsp;еще как-то? Я только начал изучать Haskell, поэтому не сообразил, как это сделать через &amp;quot;продвинутые&amp;quot; фичи.</content>
  </entry>
</feed>

