<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр / Комментарии к посту «Катаморфизм в F#» в блоге «.NET»</title>
	<link>http://habrahabr.ru/rss/post/57503/</link>
	<description><![CDATA[Новые комментарии к посту «Катаморфизм в F#» в блоге «.NET»]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sat, 11 Feb 2012 12:57:11 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	

	
	
	
	
	
		
	
		<item>
			<title>18.04.2009 08:00:24 butaji</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1547303</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1547303</link>
			<description><![CDATA[не туда зареплаил )]]></description>
			<pubDate>Sat, 18 Apr 2009 08:00:24 GMT</pubDate>
			<author>butaji</author>
		</item>
	

	
		<item>
			<title>17.04.2009 14:16:56 XaocCPS</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1545097</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1545097</link>
			<description><![CDATA[мне?]]></description>
			<pubDate>Fri, 17 Apr 2009 14:16:56 GMT</pubDate>
			<author>XaocCPS</author>
		</item>
	

	
		<item>
			<title>17.04.2009 13:52:42 khayrov</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544978</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544978</link>
			<description><![CDATA[В компиляторе — на здоровье, но меньше всего охота в ФЯ делать работу компилятора руками :-)]]></description>
			<pubDate>Fri, 17 Apr 2009 13:52:42 GMT</pubDate>
			<author>khayrov</author>
		</item>
	

	
		<item>
			<title>17.04.2009 13:24:16 chiaroscuro</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544839</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544839</link>
			<description><![CDATA[&gt; Что-то у меня противоречивые чувства по поводу поголовного переписывания рекурсии в CPS.<br/>
<br/>
AFAIK компиляторы многих функциональных языков так и поступают. Так можно легко получить call/cc, например.]]></description>
			<pubDate>Fri, 17 Apr 2009 13:24:16 GMT</pubDate>
			<author>chiaroscuro</author>
		</item>
	

	
		<item>
			<title>17.04.2009 13:14:03 lomeo</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544774</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544774</link>
			<description><![CDATA[Потому что стартовый элемент берётся из коллекции.]]></description>
			<pubDate>Fri, 17 Apr 2009 13:14:03 GMT</pubDate>
			<author>lomeo</author>
		</item>
	

	
		<item>
			<title>17.04.2009 13:12:22 lomeo</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544765</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544765</link>
			<description><![CDATA[В отличие от энергичного F# в ленивом Haskell благодаря deforestation связка генератор — map/filter — foldr может даже не порождать списки. И, разумеется, foldr не бежит по списку, запоминая его. В этом нет никакой необходимости — достаточно вспомнить, что foldr просто заменяет (::) на операцию, а [] на стартовый элемент. Если операция ленива (не +), то foldr очень даже выручает.]]></description>
			<pubDate>Fri, 17 Apr 2009 13:12:22 GMT</pubDate>
			<author>lomeo</author>
		</item>
	

	
		<item>
			<title>17.04.2009 13:02:48 lomeo</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544716</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544716</link>
			<description><![CDATA[Вот эта статья раньше была в русской вики<br/>
<a href="http://traditio.ru/wiki/Катаморфизм">traditio.ru/wiki/Катаморфизм</a>]]></description>
			<pubDate>Fri, 17 Apr 2009 13:02:48 GMT</pubDate>
			<author>lomeo</author>
		</item>
	

	
		<item>
			<title>17.04.2009 11:33:37 Meroving</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544416</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544416</link>
			<description><![CDATA[вы правы конечно.<br/>
что ж, чудеса в нашем мире случаются нечасто :)]]></description>
			<pubDate>Fri, 17 Apr 2009 11:33:37 GMT</pubDate>
			<author>Meroving</author>
		</item>
	

	
		<item>
			<title>17.04.2009 11:23:17 shai_xylyd</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544351</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544351</link>
			<description><![CDATA[Спасибо, хорошая статья. Узнал что-то новое.<br/>
<br/>
Но думаю, что стоит добавить при переходе от левосторонней свертке к правосторонней, что мы все равно и по любому теряем в памяти: fold_left бежит по списку и применяет функцию, а fold_right бежит по списку, запоминает его, а затем бежит обратно и применяет функцию. Просто в первом случае он запоминает его в стеке, а во втором в куче, но порядок расхода памяти одинаковый — чуда нет. При работе с деревом так же создается его копия.]]></description>
			<pubDate>Fri, 17 Apr 2009 11:23:17 GMT</pubDate>
			<author>shai_xylyd</author>
		</item>
	

	
		<item>
			<title>17.04.2009 11:09:49 VoidEx</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1544266</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1544266</link>
			<description><![CDATA[И reduce не принимает пустые списки. Он не катаморфизм в этом плане :)]]></description>
			<pubDate>Fri, 17 Apr 2009 11:09:49 GMT</pubDate>
			<author>VoidEx</author>
		</item>
	

	
		<item>
			<title>17.04.2009 10:14:30 Meroving</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543903</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543903</link>
			<description><![CDATA[ну подобных вариантов море, никто спорит :)<br/>
к слову, отличие reduce от fold лично меня немного смущает. только то, что в reduce тип аккумулятора должен совпадать с типом элемента коллекции?]]></description>
			<pubDate>Fri, 17 Apr 2009 10:14:30 GMT</pubDate>
			<author>Meroving</author>
		</item>
	

	
		<item>
			<title>17.04.2009 10:11:38 butaji</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543890</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543890</link>
			<description><![CDATA[Сорри за оффтоп, но очень не нравится когда 15 мин времени тратишь на чтение непонятных букв. Каково Вам будет читать текст, где слова сокращены до букв?]]></description>
			<pubDate>Fri, 17 Apr 2009 10:11:38 GMT</pubDate>
			<author>butaji</author>
		</item>
	

	
		<item>
			<title>17.04.2009 10:08:49 khayrov</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543870</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543870</link>
			<description><![CDATA[Что-то у меня противоречивые чувства по поводу поголовного переписывания рекурсии в CPS. Мы размениваем стек на выделение памяти в куче, причём сборщик мусора не может подобрать ни одно замыкание до завершения всей функции. Понятно, что CLR больнее бьёт по рукам за переполнение стека, но CPS-преобразование зачастую работает как обфускатор.<br/>
Спасибо за статью, надо сделать ещё один набег на <a href="http://wwwhome.cs.utwente.nl/~fokkinga/mmf91m.ps" title="Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire">бананы с колючей проволокой</a>.]]></description>
			<pubDate>Fri, 17 Apr 2009 10:08:49 GMT</pubDate>
			<author>khayrov</author>
		</item>
	

	
		<item>
			<title>17.04.2009 09:35:05 mezastel</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543627</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543627</link>
			<description><![CDATA[Насчет суммирования элементов списка — а что если написать так:<br/>
<br/>
myList |&gt; Seq.of_list |&gt; Seq.reduce (fun x y -&gt; x + y)]]></description>
			<pubDate>Fri, 17 Apr 2009 09:35:05 GMT</pubDate>
			<author>mezastel</author>
		</item>
	

	
		<item>
			<title>17.04.2009 08:44:52 XaocCPS</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543309</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543309</link>
			<description><![CDATA[так значительно лучше (на мой вкус) :)<br/>
спасибо]]></description>
			<pubDate>Fri, 17 Apr 2009 08:44:52 GMT</pubDate>
			<author>XaocCPS</author>
		</item>
	

	
		<item>
			<title>17.04.2009 08:38:58 Meroving</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543271</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543271</link>
			<description><![CDATA[подправил немного]]></description>
			<pubDate>Fri, 17 Apr 2009 08:38:58 GMT</pubDate>
			<author>Meroving</author>
		</item>
	

	
		<item>
			<title>17.04.2009 08:36:25 chiaroscuro</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543251</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543251</link>
			<description><![CDATA[&gt; Да что-то я не думаю, что многим понравится.<br/>
<br/>
А о чем еще писать? Очередное «я вот напейсал вот такой быдлокод, зацените результаты воздействия синдрома туннельного зрения»? (конечно, не все статьи на хабре такие, но много.)<br/>
<br/>
/me ушел негодовать.<br/>
<br/>
&gt; Она ровно это и делает — функция sprintf — это и есть «печать в строку», так что функция Printer имеет тип Expr -&gt; string :)<br/>
<br/>
Млин, я уже путаю printf и sprintf! O_O]]></description>
			<pubDate>Fri, 17 Apr 2009 08:36:25 GMT</pubDate>
			<author>chiaroscuro</author>
		</item>
	

	
		<item>
			<title>17.04.2009 08:23:15 Meroving</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543190</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543190</link>
			<description><![CDATA[ммм, наверно вы правы, сейчас попробую подправить.<br/>
вообще h, t — это обычно head и tail, r, l — right и left]]></description>
			<pubDate>Fri, 17 Apr 2009 08:23:15 GMT</pubDate>
			<author>Meroving</author>
		</item>
	

	
		<item>
			<title>17.04.2009 08:20:49 Meroving</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543180</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543180</link>
			<description><![CDATA[Да что-то я не думаю, что многим понравится.<br/>
— Нельзя ли как-нибудь убрать побочные эффекты из Printer? (Пусть возвращает строку, которую затем можно будет вывести куда угодно.)<br/>
— Она ровно это и делает — функция sprintf — это и есть «печать в строку», так что функция Printer имеет тип Expr -&gt; string :)]]></description>
			<pubDate>Fri, 17 Apr 2009 08:20:49 GMT</pubDate>
			<author>Meroving</author>
		</item>
	

	
		<item>
			<title>17.04.2009 08:19:07 XaocCPS</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543172</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543172</link>
			<description><![CDATA[лямбды и итераторы цикла — это понятно<br/>
но в вышеприведенном коде такой подход — везде, я про это и спросил, поскольку с языком практически не знаком, а пытаться разобраться на сплошных r, t, e, l — просто не могу]]></description>
			<pubDate>Fri, 17 Apr 2009 08:19:07 GMT</pubDate>
			<author>XaocCPS</author>
		</item>
	

	
		<item>
			<title>17.04.2009 08:15:57 Meroving</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543160</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543160</link>
			<description><![CDATA[характеристикой это назвать сложно, скорее (насколько я успел заметить) некоторая негласная договоренность программистов. Максимально полно именуются только верхнеуровневые функции. Может быть это подсознательная мысль: «ФП-код должен быть коротким» покоя не дает? :)<br/>
Переменные в лямбдах вообще обычно одним или двумя символами обозначают. Ну собственно, так же как и for (int i = 0… )]]></description>
			<pubDate>Fri, 17 Apr 2009 08:15:57 GMT</pubDate>
			<author>Meroving</author>
		</item>
	

	
		<item>
			<title>17.04.2009 07:31:40 chiaroscuro</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543041</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543041</link>
			<description><![CDATA[Если переменная встречается всего на двух строчках, то зачем ей длинное имя?]]></description>
			<pubDate>Fri, 17 Apr 2009 07:31:40 GMT</pubDate>
			<author>chiaroscuro</author>
		</item>
	

	
		<item>
			<title>17.04.2009 07:30:50 chiaroscuro</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543039</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543039</link>
			<description><![CDATA[Клево. Тема теорката вообще интересна. :) (правда, я его не осиливаю)<br/>
<br/>
Нельзя ли как-нибудь убрать побочные эффекты из Printer? (Пусть возвращает строку, которую затем можно будет вывести куда угодно.) Наверняка там (в F#) есть какой-нибудь «монадический катаморфизм» + монада Writer.<br/>
<br/>
&gt; P.S. Не знаю, стоит ли переносить в какой-то коллективный блог, все-таки тема специфическая. <br/>
<br/>
Ну конечно стоит. Катаморфизм полезен же!<br/>
<br/>
Следующая статья, наверное, будет о zipper'ах? :) Тоже очень полезная штука.]]></description>
			<pubDate>Fri, 17 Apr 2009 07:30:50 GMT</pubDate>
			<author>chiaroscuro</author>
		</item>
	

	
		<item>
			<title>17.04.2009 07:27:04 XaocCPS</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/57503/#comment_1543029</guid>
			<link>http://habrahabr.ru/blogs/net/57503/#comment_1543029</link>
			<description><![CDATA[скажите, а именование переменных в виде одной или малого количества символов — это характеристика языка или просто привычка? я серьезно спрашиваю, без сарказма, интересно]]></description>
			<pubDate>Fri, 17 Apr 2009 07:27:04 GMT</pubDate>
			<author>XaocCPS</author>
		</item>
	

	
</channel>
</rss>

