<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: ФП: lazy evaluation &#8211; это завтрашние результаты вычисления функций уже сегодня.</title>
	<atom:link href="http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/</link>
	<description>сообщество программистов</description>
	<lastBuildDate>Thu, 18 Mar 2010 20:18:04 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: egor</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-87278</link>
		<dc:creator>egor</dc:creator>
		<pubDate>Mon, 15 Feb 2010 14:08:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-87278</guid>
		<description>Хорошая статья, в принципе все понял
но вот эти строка меня просто убивает -  не пойму что происходит )
    (_,collectedLabels,_) = last result
поясните или ссылкните кто понимает</description>
		<content:encoded><![CDATA[<p>Хорошая статья, в принципе все понял<br />
но вот эти строка меня просто убивает &#8211;  не пойму что происходит )<br />
    (_,collectedLabels,_) = last result<br />
поясните или ссылкните кто понимает</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rssh</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-10342</link>
		<dc:creator>rssh</dc:creator>
		<pubDate>Fri, 13 Jul 2007 18:10:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-10342</guid>
		<description>реализацию на termware см. в http://rssh.livejournal.com/66944.html</description>
		<content:encoded><![CDATA[<p>реализацию на termware см. в <a href="http://rssh.livejournal.com/66944.html" rel="nofollow">http://rssh.livejournal.com/66944.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: motus</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9882</link>
		<dc:creator>motus</dc:creator>
		<pubDate>Tue, 08 May 2007 18:19:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9882</guid>
		<description>о, даже отступы почти получились. короче, для тех, кто будет еще код постить в комментах: используйте таг code, а в нем - nbsp везде вместо пробелов, плюс один nbsp в каждой пустой строке, чтобы не было совсем пустых строк, а то wordpress думает что это конец блока code. ща я совсем красивый код задвину:

&lt;code&gt;
&#160;module&#160;Main&#160;where
&#160;
&#160;import&#160;Text.Regex.Posix
&#160;import&#160;qualified&#160;Data.Map&#160;as&#160;Map
&#160;
&#160;data&#160;RefStatus&#160;=&#160;Resolved&#160;&#124;&#160;Unresolved&#160;&#124;&#160;Unused&#160;deriving&#160;(Eq,&#160;Show)
&#160;type&#160;Dict&#160;=&#160;Map.Map&#160;String&#160;(Int,&#160;RefStatus)
&#160;
&#160;main&#160;=&#160;getContents&#160;&gt;&gt;=&#160;(mapM_&#160;putStr&#160;.&#160;process&#160;Map.empty)
&#160;
&#160;process&#160;::&#160;Dict&#160;-&gt;&#160;String&#160;-&gt;&#160;[String]
&#160;
&#160;process&#160;dict&#160;&quot;&quot;&#160;=
&#160;&#160;&#160;[&#160;&quot;ERROR:&#160;&quot;&#160;++&#160;show&#160;st&#160;++&#160;&quot;&#160;&quot;&#160;++&#160;name&#160;++&#160;&quot;&#160;[&quot;&#160;++&#160;show&#160;n&#160;++&#160;&quot;]\n&quot;
&#160;&#160;&#160;&#160;&#160;&#124;&#160;(name,&#160;(n,&#160;st))&#160;&lt;-&#160;Map.assocs&#160;dict,&#160;st&#160;/=&#160;Resolved&#160;]
&#160;
&#160;process&#160;dict&#160;txt&#160;=
&#160;&#160;&#160;pre&#160;:&#160;reftext&#160;:&#160;process&#160;newdict&#160;post
&#160;&#160;&#160;where&#160;(pre,&#160;_,&#160;post,&#160;match)&#160;=
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;txt&#160;=~&#160;&quot;(@(ref&#124;label)\\{([^}]+)\\})&quot;&#160;::&#160;(String,String,String,[String])
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(reftext,&#160;newdict)&#160;=&#160;lookupRef&#160;dict&#160;match
&#160;
&#160;lookupRef&#160;dict&#160;[]&#160;=&#160;(&quot;&quot;,&#160;dict)
&#160;
&#160;lookupRef&#160;dict&#160;[_,&#160;st,&#160;name]&#160;=
&#160;&#160;&#160;mapFst&#160;(refText&#160;ref)&#160;$&#160;Map.insertLookupWithKey&#160;updRef&#160;name&#160;(sz,&#160;ref)&#160;dict
&#160;&#160;&#160;where&#160;ref&#160;=&#160;if&#160;st&#160;==&#160;&quot;ref&quot;&#160;then&#160;Unresolved&#160;else&#160;Unused
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sz&#160;=&#160;Map.size&#160;dict&#160;+&#160;1
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mapFst&#160;f&#160;(a,&#160;b)&#160;=&#160;(f&#160;a,&#160;b)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;refText&#160;Unused&#160;&#160;&#160;&#160;&#160;Nothing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&quot;[&quot;&#160;++&#160;show&#160;sz&#160;++&#160;&quot;]&quot;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;refText&#160;Unused&#160;&#160;&#160;&#160;&#160;(Just&#160;(n,&#160;Unresolved))&#160;=&#160;&quot;[&quot;&#160;++&#160;show&#160;n&#160;&#160;++&#160;&quot;]&quot;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;refText&#160;Unused&#160;&#160;&#160;&#160;&#160;(Just&#160;(n,&#160;_))&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&quot;[DUP:&#160;&quot;&#160;++&#160;show&#160;n&#160;&#160;++&#160;&quot;:&quot;&#160;++&#160;name&#160;++&#160;&quot;]&quot;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;refText&#160;Unresolved&#160;Nothing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&quot;(see&#160;[&quot;&#160;++&#160;show&#160;sz&#160;++&#160;&quot;])&quot;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;refText&#160;Unresolved&#160;(Just&#160;(n,&#160;_))&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;&quot;(see&#160;[&quot;&#160;++&#160;show&#160;n&#160;&#160;++&#160;&quot;])&quot;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;updRef&#160;_&#160;(_,&#160;Unused)&#160;&#160;&#160;&#160;&#160;(n,&#160;Unresolved)&#160;&#160;=&#160;(n,&#160;Resolved)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;updRef&#160;_&#160;(_,&#160;Unused)&#160;&#160;&#160;&#160;&#160;var&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;var
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;updRef&#160;_&#160;(_,&#160;Unresolved)&#160;(n,&#160;Unresolved)&#160;&#160;=&#160;(n,&#160;Unresolved)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;updRef&#160;_&#160;(_,&#160;Unresolved)&#160;(n,&#160;_)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;=&#160;(n,&#160;Resolved)
&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>о, даже отступы почти получились. короче, для тех, кто будет еще код постить в комментах: используйте таг code, а в нем &#8211; nbsp везде вместо пробелов, плюс один nbsp в каждой пустой строке, чтобы не было совсем пустых строк, а то wordpress думает что это конец блока code. ща я совсем красивый код задвину:</p>
<p><code><br />
&nbsp;module&nbsp;Main&nbsp;where<br />
&nbsp;<br />
&nbsp;import&nbsp;Text.Regex.Posix<br />
&nbsp;import&nbsp;qualified&nbsp;Data.Map&nbsp;as&nbsp;Map<br />
&nbsp;<br />
&nbsp;data&nbsp;RefStatus&nbsp;=&nbsp;Resolved&nbsp;|&nbsp;Unresolved&nbsp;|&nbsp;Unused&nbsp;deriving&nbsp;(Eq,&nbsp;Show)<br />
&nbsp;type&nbsp;Dict&nbsp;=&nbsp;Map.Map&nbsp;String&nbsp;(Int,&nbsp;RefStatus)<br />
&nbsp;<br />
&nbsp;main&nbsp;=&nbsp;getContents&nbsp;&gt;&gt;=&nbsp;(mapM_&nbsp;putStr&nbsp;.&nbsp;process&nbsp;Map.empty)<br />
&nbsp;<br />
&nbsp;process&nbsp;::&nbsp;Dict&nbsp;-&gt;&nbsp;String&nbsp;-&gt;&nbsp;[String]<br />
&nbsp;<br />
&nbsp;process&nbsp;dict&nbsp;""&nbsp;=<br />
&nbsp;&nbsp;&nbsp;[&nbsp;"ERROR:&nbsp;"&nbsp;++&nbsp;show&nbsp;st&nbsp;++&nbsp;"&nbsp;"&nbsp;++&nbsp;name&nbsp;++&nbsp;"&nbsp;["&nbsp;++&nbsp;show&nbsp;n&nbsp;++&nbsp;"]\n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;(name,&nbsp;(n,&nbsp;st))&nbsp;&lt;-&nbsp;Map.assocs&nbsp;dict,&nbsp;st&nbsp;/=&nbsp;Resolved&nbsp;]<br />
&nbsp;<br />
&nbsp;process&nbsp;dict&nbsp;txt&nbsp;=<br />
&nbsp;&nbsp;&nbsp;pre&nbsp;:&nbsp;reftext&nbsp;:&nbsp;process&nbsp;newdict&nbsp;post<br />
&nbsp;&nbsp;&nbsp;where&nbsp;(pre,&nbsp;_,&nbsp;post,&nbsp;match)&nbsp;=<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txt&nbsp;=~&nbsp;"(@(ref|label)\\{([^}]+)\\})"&nbsp;::&nbsp;(String,String,String,[String])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reftext,&nbsp;newdict)&nbsp;=&nbsp;lookupRef&nbsp;dict&nbsp;match<br />
&nbsp;<br />
&nbsp;lookupRef&nbsp;dict&nbsp;[]&nbsp;=&nbsp;("",&nbsp;dict)<br />
&nbsp;<br />
&nbsp;lookupRef&nbsp;dict&nbsp;[_,&nbsp;st,&nbsp;name]&nbsp;=<br />
&nbsp;&nbsp;&nbsp;mapFst&nbsp;(refText&nbsp;ref)&nbsp;$&nbsp;Map.insertLookupWithKey&nbsp;updRef&nbsp;name&nbsp;(sz,&nbsp;ref)&nbsp;dict<br />
&nbsp;&nbsp;&nbsp;where&nbsp;ref&nbsp;=&nbsp;if&nbsp;st&nbsp;==&nbsp;"ref"&nbsp;then&nbsp;Unresolved&nbsp;else&nbsp;Unused<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sz&nbsp;=&nbsp;Map.size&nbsp;dict&nbsp;+&nbsp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapFst&nbsp;f&nbsp;(a,&nbsp;b)&nbsp;=&nbsp;(f&nbsp;a,&nbsp;b)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refText&nbsp;Unused&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"["&nbsp;++&nbsp;show&nbsp;sz&nbsp;++&nbsp;"]"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refText&nbsp;Unused&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Just&nbsp;(n,&nbsp;Unresolved))&nbsp;=&nbsp;"["&nbsp;++&nbsp;show&nbsp;n&nbsp;&nbsp;++&nbsp;"]"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refText&nbsp;Unused&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Just&nbsp;(n,&nbsp;_))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"[DUP:&nbsp;"&nbsp;++&nbsp;show&nbsp;n&nbsp;&nbsp;++&nbsp;":"&nbsp;++&nbsp;name&nbsp;++&nbsp;"]"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refText&nbsp;Unresolved&nbsp;Nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"(see&nbsp;["&nbsp;++&nbsp;show&nbsp;sz&nbsp;++&nbsp;"])"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refText&nbsp;Unresolved&nbsp;(Just&nbsp;(n,&nbsp;_))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"(see&nbsp;["&nbsp;++&nbsp;show&nbsp;n&nbsp;&nbsp;++&nbsp;"])"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updRef&nbsp;_&nbsp;(_,&nbsp;Unused)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(n,&nbsp;Unresolved)&nbsp;&nbsp;=&nbsp;(n,&nbsp;Resolved)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updRef&nbsp;_&nbsp;(_,&nbsp;Unused)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;var<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updRef&nbsp;_&nbsp;(_,&nbsp;Unresolved)&nbsp;(n,&nbsp;Unresolved)&nbsp;&nbsp;=&nbsp;(n,&nbsp;Unresolved)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updRef&nbsp;_&nbsp;(_,&nbsp;Unresolved)&nbsp;(n,&nbsp;_)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(n,&nbsp;Resolved)<br />
</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: motus</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9881</link>
		<dc:creator>motus</dc:creator>
		<pubDate>Tue, 08 May 2007 18:12:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9881</guid>
		<description>ну, у меня такое получилось - не самый короткий вариант, но зато O(n*log k) TIME, и все просто и понятно (я надеюсь):

&lt;code&gt;
&#160;module Main where
&#160;
&#160;import Text.Regex.Posix
&#160;import qualified Data.Map as Map
&#160;
&#160;data RefStatus = Resolved &#124; Unresolved &#124; Unused deriving (Eq, Show)
&#160;type Dict = Map.Map String (Int, RefStatus)
&#160;
&#160;main = getContents &gt;&gt;= (mapM_ putStr . process Map.empty)
&#160;
&#160;process :: Dict -&gt; String -&gt; [String]
&#160;
&#160;process dict &quot;&quot; =
&#160;  [ &quot;ERROR: &quot; ++ show st ++ &quot; &quot; ++ name ++ &quot; [&quot; ++ show n ++ &quot;]\n&quot;
&#160;    &#124; (name, (n, st)) &lt;- Map.assocs dict, st /= Resolved ]
&#160;
&#160;process dict txt =
&#160;  pre : reftext : process newdict post
&#160;  where (pre, _, post, match) =
&#160;          txt =~ &quot;(@(ref&#124;label)\\{([^}]+)\\})&quot; :: (String,String,String,[String])
&#160;        (reftext, newdict) = lookupRef dict match
&#160;
&#160;lookupRef dict [] = (&quot;&quot;, dict)
&#160;
&#160;lookupRef dict [_, st, name] =
&#160;  mapFst (refText ref) $ Map.insertLookupWithKey updRef name (sz, ref) dict
&#160;  where ref = if st == &quot;ref&quot; then Unresolved else Unused
&#160;        sz = Map.size dict + 1
&#160;        mapFst f (a, b) = (f a, b)
&#160;        refText Unused     Nothing                = &quot;[&quot; ++ show sz ++ &quot;]&quot;
&#160;        refText Unused     (Just (n, Unresolved)) = &quot;[&quot; ++ show n  ++ &quot;]&quot;
&#160;        refText Unused     (Just (n, _))          = &quot;[DUP: &quot; ++ show n  ++ &quot;:&quot; ++ name ++ &quot;]&quot;
&#160;        refText Unresolved Nothing                = &quot;(see [&quot; ++ show sz ++ &quot;])&quot;
&#160;        refText Unresolved (Just (n, _))          = &quot;(see [&quot; ++ show n  ++ &quot;])&quot;
&#160;        updRef _ (_, Unused)     (n, Unresolved)  = (n, Resolved)
&#160;        updRef _ (_, Unused)     val              = val
&#160;        updRef _ (_, Unresolved) (n, Unresolved)  = (n, Unresolved)
&#160;        updRef _ (_, Unresolved) (n, _)           = (n, Resolved)
&lt;/code&gt;

&lt;b&gt;decorator:&lt;/b&gt;
а вот, кстати, интересно на хаскеле в одну строку записать. только не так, как на питоне, а честно, т.е. как композицию функций. надо будет попробовать сегодня вечером, заодно и в Arrows поупражняюсь :-)

ЗЫ во мы расписались, а! кайф какой :-)</description>
		<content:encoded><![CDATA[<p>ну, у меня такое получилось &#8211; не самый короткий вариант, но зато O(n*log k) TIME, и все просто и понятно (я надеюсь):</p>
<p><code><br />
&nbsp;module Main where<br />
&nbsp;<br />
&nbsp;import Text.Regex.Posix<br />
&nbsp;import qualified Data.Map as Map<br />
&nbsp;<br />
&nbsp;data RefStatus = Resolved | Unresolved | Unused deriving (Eq, Show)<br />
&nbsp;type Dict = Map.Map String (Int, RefStatus)<br />
&nbsp;<br />
&nbsp;main = getContents &gt;&gt;= (mapM_ putStr . process Map.empty)<br />
&nbsp;<br />
&nbsp;process :: Dict -&gt; String -&gt; [String]<br />
&nbsp;<br />
&nbsp;process dict "" =<br />
&nbsp;  [ "ERROR: " ++ show st ++ " " ++ name ++ " [" ++ show n ++ "]\n"<br />
&nbsp;    | (name, (n, st)) &lt;- Map.assocs dict, st /= Resolved ]<br />
&nbsp;<br />
&nbsp;process dict txt =<br />
&nbsp;  pre : reftext : process newdict post<br />
&nbsp;  where (pre, _, post, match) =<br />
&nbsp;          txt =~ "(@(ref|label)\\{([^}]+)\\})" :: (String,String,String,[String])<br />
&nbsp;        (reftext, newdict) = lookupRef dict match<br />
&nbsp;<br />
&nbsp;lookupRef dict [] = ("", dict)<br />
&nbsp;<br />
&nbsp;lookupRef dict [_, st, name] =<br />
&nbsp;  mapFst (refText ref) $ Map.insertLookupWithKey updRef name (sz, ref) dict<br />
&nbsp;  where ref = if st == "ref" then Unresolved else Unused<br />
&nbsp;        sz = Map.size dict + 1<br />
&nbsp;        mapFst f (a, b) = (f a, b)<br />
&nbsp;        refText Unused     Nothing                = "[" ++ show sz ++ "]"<br />
&nbsp;        refText Unused     (Just (n, Unresolved)) = "[" ++ show n  ++ "]"<br />
&nbsp;        refText Unused     (Just (n, _))          = "[DUP: " ++ show n  ++ ":" ++ name ++ "]"<br />
&nbsp;        refText Unresolved Nothing                = "(see [" ++ show sz ++ "])"<br />
&nbsp;        refText Unresolved (Just (n, _))          = "(see [" ++ show n  ++ "])"<br />
&nbsp;        updRef _ (_, Unused)     (n, Unresolved)  = (n, Resolved)<br />
&nbsp;        updRef _ (_, Unused)     val              = val<br />
&nbsp;        updRef _ (_, Unresolved) (n, Unresolved)  = (n, Unresolved)<br />
&nbsp;        updRef _ (_, Unresolved) (n, _)           = (n, Resolved)<br />
</code></p>
<p><b>decorator:</b><br />
а вот, кстати, интересно на хаскеле в одну строку записать. только не так, как на питоне, а честно, т.е. как композицию функций. надо будет попробовать сегодня вечером, заодно и в Arrows поупражняюсь <img src='http://www.developers.org.ua/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>ЗЫ во мы расписались, а! кайф какой <img src='http://www.developers.org.ua/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rssh</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9878</link>
		<dc:creator>rssh</dc:creator>
		<pubDate>Tue, 08 May 2007 16:33:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9878</guid>
		<description>2motus - это ж свободные полчаса надо. Найдуться - включу в примеры.</description>
		<content:encoded><![CDATA[<p>2motus &#8211; это ж свободные полчаса надо. Найдуться &#8211; включу в примеры.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rssh</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9877</link>
		<dc:creator>rssh</dc:creator>
		<pubDate>Tue, 08 May 2007 16:31:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9877</guid>
		<description>На форумк бага -- кушает слова внутри &lt; .. &gt;</description>
		<content:encoded><![CDATA[<p>На форумк бага &#8212; кушает слова внутри &lt; .. &gt;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rssh</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9876</link>
		<dc:creator>rssh</dc:creator>
		<pubDate>Tue, 08 May 2007 15:42:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9876</guid>
		<description>2ili - да что было в 93 году я очень хорошо знаю ;) Интересен прогресс за последние два года. [ наверное все таки надо будет какой-то event попытаться сделать.] Еще я вижу в ваших постаз один &quot;диссонанс&quot;: &gt; Поймите, сами статьи без работающей системы для применений  никого не интересуют. (Точнее те, кто в этой области работает, и так всех знают и свежие статьи коллег просматривают, а кто нет - тому они нафиг здались)  Интересуют как имепнно можно применить эти технолоогии и могут ли они в каких-то случаях удешевить разработку.</description>
		<content:encoded><![CDATA[<p>2ili &#8211; да что было в 93 году я очень хорошо знаю <img src='http://www.developers.org.ua/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Интересен прогресс за последние два года. [ наверное все таки надо будет какой-то event попытаться сделать.] Еще я вижу в ваших постаз один &#8220;диссонанс&#8221;: &gt; Поймите, сами статьи без работающей системы для применений  никого не интересуют. (Точнее те, кто в этой области работает, и так всех знают и свежие статьи коллег просматривают, а кто нет &#8211; тому они нафиг здались)  Интересуют как имепнно можно применить эти технолоогии и могут ли они в каких-то случаях удешевить разработку.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: decorator</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9875</link>
		<dc:creator>decorator</dc:creator>
		<pubDate>Tue, 08 May 2007 12:45:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9875</guid>
		<description>регекспы побились. должно быть так:
(lambda file: (lambda labels: open(&#039;sample.out&#039;, &#039;w&#039;).write(__import__(&#039;re&#039;).sub(&#039;\@(?P&lt;keyword&gt;\w+)\{(?P&lt;value&gt;\w+)\}&#039;, lambda match: &#039;[%i]&#039; % (labels.index(match.group(&quot;value&quot;))+1) if match.group(&quot;keyword&quot;) == &#039;label&#039; else &#039;see [%s]&#039; % (labels.index(match.group(&quot;value&quot;))+1), file)))([match.group(&#039;value&#039;) for match in __import__(&#039;re&#039;).finditer(&#039;\@label\{(?P&lt;value&gt;\w+)\}&#039;, file)]))(open(&#039;sample.txt&#039;, &#039;r&#039;).read())</description>
		<content:encoded><![CDATA[<p>регекспы побились. должно быть так:<br />
(lambda file: (lambda labels: open(&#8217;sample.out&#8217;, &#8216;w&#8217;).write(__import__(&#8217;re&#8217;).sub(&#8217;\@(?P&lt;keyword&gt;\w+)\{(?P&lt;value&gt;\w+)\}&#8217;, lambda match: &#8216;[%i]&#8216; % (labels.index(match.group(&#8221;value&#8221;))+1) if match.group(&#8221;keyword&#8221;) == &#8216;label&#8217; else &#8217;see [%s]&#8216; % (labels.index(match.group(&#8221;value&#8221;))+1), file)))([match.group('value') for match in __import__('re').finditer('\@label\{(?P&lt;value&gt;\w+)\}', file)]))(open(&#8217;sample.txt&#8217;, &#8216;r&#8217;).read())</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: decorator</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9874</link>
		<dc:creator>decorator</dc:creator>
		<pubDate>Tue, 08 May 2007 12:32:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9874</guid>
		<description>&lt;blockquote&gt;слабо на джаве или на С++ написать - так, чтобы было короче, чем на питоне?&lt;/blockquote&gt;
реализация на питоне (2.5) в виде однострочника, без обработки ошибок. warning: dirty hacks inside :).

&lt;code&gt;(lambda file: (lambda labels: open(&#039;sample.out&#039;, &#039;w&#039;).write(__import__(&#039;re&#039;).sub(&#039;\@(?P\w+)\{(?P\w+)\}&#039;, lambda match: &#039;[%i]&#039; % (labels.index(match.group(&quot;value&quot;))+1) if match.group(&quot;keyword&quot;) == &#039;label&#039; else &#039;see [%s]&#039; % (labels.index(match.group(&quot;value&quot;))+1), file)))([match.group(&#039;value&#039;) for match in __import__(&#039;re&#039;).finditer(&#039;\@label\{(?P\w+)\}&#039;, file)]))(open(&#039;sample.txt&#039;, &#039;r&#039;).read())&lt;/code&gt;</description>
		<content:encoded><![CDATA[<blockquote><p>слабо на джаве или на С++ написать &#8211; так, чтобы было короче, чем на питоне?</p></blockquote>
<p>реализация на питоне (2.5) в виде однострочника, без обработки ошибок. warning: dirty hacks inside <img src='http://www.developers.org.ua/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><code>(lambda file: (lambda labels: open('sample.out', 'w').write(__import__('re').sub('\@(?P\w+)\{(?P\w+)\}', lambda match: '[%i]' % (labels.index(match.group("value"))+1) if match.group("keyword") == 'label' else 'see [%s]' % (labels.index(match.group("value"))+1), file)))([match.group('value') for match in __import__('re').finditer('\@label\{(?P\w+)\}', file)]))(open('sample.txt', 'r').read())</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: motus</title>
		<link>http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation/#comment-9868</link>
		<dc:creator>motus</dc:creator>
		<pubDate>Tue, 08 May 2007 01:18:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.developers.org.ua/archives/adept/2007/04/24/fp-lazy-evaluation-eto-zavtrashnie-rezultatyi-vyichisleniya-funktsiy-uzhe-segodnya/#comment-9868</guid>
		<description>woops. how about nbsp indents (yuck):
&lt;code&gt;
&#160;&#160;- line 1 (two spaces)

&#160;&#160;  - line 1 (2 nbsp, 2 regular spaces)
&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>woops. how about nbsp indents (yuck):<br />
<code><br />
&nbsp;&nbsp;- line 1 (two spaces)</p>
<p>&nbsp;&nbsp;  - line 1 (2 nbsp, 2 regular spaces)<br />
</code></p>
]]></content:encoded>
	</item>
</channel>
</rss>
