<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3644006</guid>
        <pubDate>Thu, 24 Dec 2015 23:16:37 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3644006</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-24T21:52:47+03:00">24.12.15, 18:52</time></span><div class='quote '>Наоборот же, обычный оператор типа (Monad m =&gt; forall a b. m a -&gt; (a -&gt; m b) -&gt; m b). Или я тебя не так понял? </div></div><br>
Операторов типа не существует как класса.<br>
Так же как не существуют операторы DECLARE, IF, FOR, CASE и прочая. :yes:]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3644005</guid>
        <pubDate>Thu, 24 Dec 2015 23:13:07 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3644005</link>
        <description><![CDATA[D_KEY: Ну я на 100% не уверен, что это смайк.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3644003</guid>
        <pubDate>Thu, 24 Dec 2015 23:08:06 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3644003</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3644001'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-24T23:04:39+00:00">24.12.15, 23:04</time></span><div class='quote '><strong class='tag-b'>D_KEY</strong><br>
OffTop<br>
Флеймовый рейтинг свой видели??? &gt;:(</div></div><br>
Ага :) Этот то ли смайк то ли ещё кто многим активным участникам политики &quot;подарки&quot; сделал<br>
 Довольно однообразные, кстати.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643999</guid>
        <pubDate>Thu, 24 Dec 2015 23:00:16 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643999</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-24T18:52:47+00:00">24.12.15, 18:52</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643745'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T20:21:03+00:00">23.12.15, 20:21</time></span><div class='quote '>Ты имеешь в виду что-то вроде монады Either?</div></div><br>
Да, типа того. Конечно, есть ещё куча нюансов.</div></div><br>
Ну можно сделать для C++, примерно как я показал. Только синтаксически ты сам видел, какой отстой. А do-нотацию не сделать.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643961</guid>
        <pubDate>Thu, 24 Dec 2015 18:52:47 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643961</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643745'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T20:21:03+00:00">23.12.15, 20:21</time></span><div class='quote '>Ты имеешь в виду что-то вроде монады Either?</div></div><br>
Да, типа того. Конечно, есть ещё куча нюансов. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-24T18:59:27+00:00">24.12.15, 18:59</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643746'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T20:31:08+00:00">23.12.15, 20:31</time></span><div class='quote '>Скорее всего тогда он не соответствует определению оператора. :)</div></div><br>
Почему? Наоборот же, обычный оператор типа <span class="tag-font" data-value="Courier" style="font-family:Courier">(Monad m =&gt; forall a b. m a -&gt; (a -&gt; m b) -&gt; m b)</span>. Или я тебя не так понял?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643847</guid>
        <pubDate>Thu, 24 Dec 2015 10:16:05 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643847</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643835'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DarkEld3r &#064; <time class="tag-quote__quoted-time" datetime="2015-12-24T09:39:08+00:00">24.12.15, 09:39</time></span><div class='quote '>но выглядит тоже страшненько</div></div><br>
Да вроде не так и страшно. Особенно на фоне синтаксиса rust :D]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643835</guid>
        <pubDate>Thu, 24 Dec 2015 09:39:08 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643835</link>
        <description><![CDATA[DarkEld3r: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T18:06:16+00:00">23.12.15, 18:06</time></span><div class='quote '>В Rust, я так понимаю, это сделали через макрос try&#33; ? </div></div>Можно и так сказать, но всё-таки этот макрос недостаточно гибкий и вообще выглядит костылём для <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">if (error) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return error;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Чуть получше выглядят функции map/map_or/map_or_else/ для Option, но получается многословно. do-нотацию на макросах <a class='tag-url' href='https://github.com/TeXitoi/rust-mdo' target='_blank'>пытались делать</a>, но выглядит тоже страшненько, кроме самых простых случаев:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">let l = mdo! {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;z =&#60;&#60; 1i32..11;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;x =&#60;&#60; 1..z;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;y =&#60;&#60; x..z;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;when x * x + y * y == z * z;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret ret((x, y, z))</div><div class="code_line">&nbsp;&nbsp; &nbsp;}.collect::&#60;Vec&#60;_&#62;&#62;();</div></ol></div></div></div></div>]]></description>
        <author>DarkEld3r</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643746</guid>
        <pubDate>Wed, 23 Dec 2015 20:31:08 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643746</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643745'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T20:21:03+00:00">23.12.15, 20:21</time></span><div class='quote '>Ну вот монады позволяют как бы пеегружать ; </div></div><br>
Скорее всего тогда он не соответствует определению оператора. :) <br>
Могу согласиться, что разделитель(delimiter) может быть в любом языке определен как что угодно. Попробуйте перегрузить пробел &quot; &quot;. Это однопозиционный разделитель, который в современных языках не есть оператор ни в коем случае...<br>
Не хватает семантики для существующих на клавиатуре одноклавишных символов - выдумываем двупозиционные, трех и т.д. В Javascript не шли путем перегрузки, а тупо вводили 3-х, 4-х и 5-ти позиционные.  <br>
Мне такой подход виден более очевидным.]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643745</guid>
        <pubDate>Wed, 23 Dec 2015 20:21:03 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643745</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T18:06:16+00:00">23.12.15, 18:06</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643647'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T12:10:02+00:00">23.12.15, 12:10</time></span><div class='quote '>Но вообще это бесполезная для С++ штука. Монада для списков и то полезнее.</div></div><br>
А вот чистому Си не повредили бы, чтобы проверки кодов ошибок синтаксически лучше выглядели б.</div></div><br>
Ты имеешь в виду что-то вроде монады Either? Или ты вообще вне контекста обсуждения монад? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-23T20:22:04+00:00">23.12.15, 20:22</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643741'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T20:01:12+00:00">23.12.15, 20:01</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T18:06:16+00:00">23.12.15, 18:06</time></span><div class='quote '>А оператор ; переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме. </div></div><br>
Оператора &quot;;&quot; увы не существует.<br>
По крайней мере в существующих языках программирования.<br>
<a class='tag-url' href='https://en.wikipedia.org/wiki/Operator_%28computer_programming%29' target='_blank'>https://en.wikipedia.org/wiki/Operator_%28c..._programming%29</a><br>
Общепринятое определение оператора:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> an operator is an object that is <strong class='tag-b'>capable of manipulating a value</strong></div></div></div></div><br>
Ну вот монады позволяют как бы пеегружать ; <br>
Не в C++ :)]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643741</guid>
        <pubDate>Wed, 23 Dec 2015 20:01:12 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643741</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T18:06:16+00:00">23.12.15, 18:06</time></span><div class='quote '>А оператор ; переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме. </div></div><br>
Оператора &quot;;&quot; увы не существует.<br>
По крайней мере в существующих языках программирования.<br>
<a class='tag-url' href='https://en.wikipedia.org/wiki/Operator_%28computer_programming%29' target='_blank'>https://en.wikipedia.org/wiki/Operator_%28c..._programming%29</a><br>
Общепринятое определение оператора:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> an operator is an object that is <strong class='tag-b'>capable of manipulating a value</strong></div></div>]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643731</guid>
        <pubDate>Wed, 23 Dec 2015 18:40:47 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643731</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T18:06:16+00:00">23.12.15, 18:06</time></span><div class='quote '>А оператор <span class="tag-font" data-value="Courier" style="font-family:Courier">;</span> переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме.</div></div><br>
Нет, но operator ,  можно :) <br>
Только я тут больше не о простой цепочке, а о &lt;-. Т.е. даже если бы мы перегрузили ; , это бы не избавило нас от лямбд.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643720</guid>
        <pubDate>Wed, 23 Dec 2015 18:06:16 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643720</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643485'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T11:51:36+00:00">22.12.15, 11:51</time></span><div class='quote '>Читал доку по Эрлангу, видел там вычисление функции как последовательность утверждений, де жа вю ... Пролог.</div></div><br>
Э-м... Можешь слегка по-подробней? А то у меня возникает стойкое ощущение, что тебя слегка ввела в заблуждение Прологоподобная грамматика Эрланга. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-23T18:16:43+00:00">23.12.15, 18:16</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643647'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T12:10:02+00:00">23.12.15, 12:10</time></span><div class='quote '>Но вообще это бесполезная для С++ штука. Монада для списков и то полезнее.</div></div><br>
А вот чистому Си не повредили бы, чтобы проверки кодов ошибок синтаксически лучше выглядели б. В Rust, я так понимаю, это сделали через макрос <span class="tag-font" data-value="Courier" style="font-family:Courier">try&#33;</span> ? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-23T18:23:17+00:00">23.12.15, 18:23</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643647'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T12:10:02+00:00">23.12.15, 12:10</time></span><div class='quote '>do-нотацию для С++ придумать сложнее... Сишные &quot;макросы&quot; тут слабоваты, а шаблоны синтаксис объявлений не поменяют.</div></div><br>
А оператор <span class="tag-font" data-value="Courier" style="font-family:Courier">;</span> переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643674</guid>
        <pubDate>Wed, 23 Dec 2015 14:23:08 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643674</link>
        <description><![CDATA[D_KEY: О, там как раз для future реализация, то, что <strong class='tag-b'>MyNameIsIgor</strong> говорил.<br>
<br>
А вот do-нотацию я что-то не увидел...]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643671</guid>
        <pubDate>Wed, 23 Dec 2015 14:12:04 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643671</link>
        <description><![CDATA[Oleg2004: Вот <a class='tag-url' href='http://habrahabr.ru/post/205026/' target='_blank'> тут </a> как раз в тему :)<br>
А вот <a class='tag-url' href='http://eax.me/monads/' target='_blank'> тут </a> даже я кое что понял. :yes: <br>
Но вот этого я не могу понять.<br>
Да, ведь можно нагородить операторов типа например &quot;&lt;&gt;+-&gt;-&quot; совершенно бессмысленных с точки зрения общепринятого понимания их составляющих - и потом гордо объявить, что это -   операция &quot;приковывать цепью&quot;(с) хрен знает что к хрен знает чему.<br>
Понятно, что любой язык программирования есть чистейшей воды формальная система.<br>
Но должны же быть и некие пределы. :( <br>
С этой точки зрения всем знакомый нам знак интеграла есть пример очевидной формализации целого алгоритма&#33;&#33;&#33; - но совершенно осмысленный и понятный.<br>
Именно это обстоятельство меня и настораживает. Слишком субъективны термины, понятия, операции и прочие процессы.<br>
А это описание вообще шедевр:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>В функциональном программировании монада - структура, которая представляет вычисления, определенные как последовательности шагов: тип со структурой монады определяет то, что это означает приковывать цепью операции или функции гнезда того типа вместе. Это позволяет программисту строить трубопроводы, которые обрабатывают данные в шагах, в которых каждое действие украшено дополнительными правилами обработки, предоставленными монадой.</div></div>  :&#39;( <br>
После трубопровода надо вводить категории вентиля, заглушки, датчиков давления и прочая...потом перейдем к канализации - в смысле объединения трубопроводов как каналов потоков информации...задачи фильтрации потоков канализации и тд... :wacko:<br>
PS<br>
В потоковом программировании тоже есть интересные нововведения, как например &quot;цвет данных&quot;<br>
Какой то философ сказал<br>
&quot;ни одна вещь не должна объясняться сложнее чем она есть на самом деле&quot;]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643662</guid>
        <pubDate>Wed, 23 Dec 2015 13:45:23 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643662</link>
        <description><![CDATA[shm: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643647'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T12:10:02+00:00">23.12.15, 12:10</time></span><div class='quote '>Не такая уж и большая, да?</div></div><br>
Не сильна большая, но мозг выносит сильнее.]]></description>
        <author>shm</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643647</guid>
        <pubDate>Wed, 23 Dec 2015 12:10:02 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643647</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643642'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>shm &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T11:28:22+00:00">23.12.15, 11:28</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643631'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T09:55:50+00:00">23.12.15, 09:55</time></span><div class='quote '>будет выглядеть вот так:</div></div><br>
 :crazy:</div></div><br>
Ну do-нотация это просто сахар. На самом деле компилятор haskell сначала превратит<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main = do</div><div class="code_line">&nbsp;&nbsp; &nbsp;putStrLn &quot;What is your name?&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;name &#60;- getLine</div><div class="code_line">&nbsp;&nbsp; &nbsp;putStrLn (&quot;Nice to meet you, &quot; ++ name ++ &quot;!&quot;)</div></ol></div></div></div></div><br>
в<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main =</div><div class="code_line">&nbsp;&nbsp; &nbsp;putStrLn &quot;What is your name?&quot; &#62;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;getLine &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#62;&#62;= \name -&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;putStrLn (&quot;Nice to meet you, &quot; ++ name ++ &quot;!&quot;)</div></ol></div></div></div></div><br>
а потом уже будет с этим работать. Тут разница с кодом<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto io_main =</div><div class="code_line">&nbsp;&nbsp; &nbsp;putLine(&quot;What is your name?&quot;) &#62;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;getLine(unit{}) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#62;&#62;= [=](auto name) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return putLine(&quot;Nice to meet you, &quot; + name + &quot;!&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div></ol></div></div></div></div><br>
Не такая уж и большая, да? :) <br>
<br>
do-нотацию для С++ придумать сложнее... Сишные &quot;макросы&quot; тут слабоваты, а шаблоны синтаксис объявлений не поменяют. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-23T12:15:11+00:00">23.12.15, 12:15</time></span></span><br>
Но вообще это бесполезная для С++ штука. Монада для списков и то полезнее.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643642</guid>
        <pubDate>Wed, 23 Dec 2015 11:28:22 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643642</link>
        <description><![CDATA[shm: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643631'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-23T09:55:50+00:00">23.12.15, 09:55</time></span><div class='quote '>будет выглядеть вот так:</div></div><br>
 :crazy:]]></description>
        <author>shm</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643638</guid>
        <pubDate>Wed, 23 Dec 2015 11:12:54 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643638</link>
        <description><![CDATA[Oleg2004: <strong class='tag-b'>D_KEY</strong><br>
Да уж, продемонстрировали недюжинные познания. Жаль что во флейме, а так бы получили бы от меня +1 в тематике. <br>
Придется это делать во флейме :D]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643632</guid>
        <pubDate>Wed, 23 Dec 2015 09:57:33 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643632</link>
        <description><![CDATA[D_KEY: ХЗ зачем я все это делал, но было интересно :D]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643631</guid>
        <pubDate>Wed, 23 Dec 2015 09:55:50 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643631</link>
        <description><![CDATA[D_KEY: Теперь по поводу IO.<br>
<br>
Смысл IO в добавлении работы с побочными эффектами в чистый язык. Одним из способов(в каком-то смысле теоретическим) представления побочных эффектов в чистом языке является работа с некоторым объектом, представляющим &quot;реальный мир&quot;.<br>
<br>
И каждое действие с побочными эффектами в чистом языке мы будем представлять в виде функций вида <strong class='tag-b'>(real_world) -&gt; (real_world, data)</strong>. Т.е. мы как будто не меняем внешние условия, а возвращаем новое состояние мира вместе с каким-то значением.<br>
<strong class='tag-b'>IO&lt;T&gt;</strong> как раз представляет собой обертку над <strong class='tag-b'>(real_world) -&gt; (real_world, T)</strong> и позволяет через монадический интерфейс работать с вычислениями, &quot;меняющими мир&quot;(через якобы возврат &quot;нового мира&quot;).<br>
<br>
<strong class='tag-b'>В Haskell</strong> тип RealWorld скрыт от пользователя, как и внутренняя структура IO, т.е. <strong class='tag-b'>наружу торчит только тип IO a, но запаковываем значение мы через return, а достаем значение только внутри монадического вычисления</strong>(как и в других монадах - через лямбду или &lt;- в do-нотации).<br>
<br>
Теперь возвращаемся к C++.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">struct real_world</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;explicit real_world(size_t i = 0) : m_i(i) {}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;real_world(const real_world &amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;real_world(real_world &amp;&amp; other) : m_i(other.m_i) {}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const real_world &amp; operator = (const real_world &amp; other) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const real_world &amp; operator = (real_world &amp;&amp; other) = delete;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// &quot;меняем мир&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// принимаем функцию с побочными эффектами,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// возвращаем пару из &quot;нового мира&quot; и результата функции</div><div class="code_line">&nbsp;&nbsp; &nbsp;template&#60;typename T, typename F&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::pair&#60;real_world, T&#62; change(F f) const</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return std::make_pair(real_world{m_i + 1}, f());</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;const size_t m_i;</div><div class="code_line">};</div></ol></div></div></div></div><br>
<br>
IO:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">struct IO {</div><div class="code_line">&nbsp;&nbsp; // инкапсулируем функцию, маскирующую побочные эффекты через возврат &quot;нового мира&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;using f_type = std::function&#60;std::pair&#60;real_world, T&#62;(real_world)&#62;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;explicit IO(f_type f)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;: m_f(std::move(f))</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// запускаем функцию, которая порождает &quot;новый мир&quot; и значение</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto run(real_world w) const -&#62; std::pair&#60;real_world, T&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return m_f(std::move(w));</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;f_type m_f;</div><div class="code_line">};</div></ol></div></div></div></div><br>
<br>
Реализуем монаду:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template&#60;&#62;</div><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">auto Monad&#60;IO&#62;::ret(T a) -&#62; IO&#60;T&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// создаем IO с функцией, которая просто создает пару из &quot;мира&quot; и значения,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// не производя побочных вычислений и не меняя мир</div><div class="code_line">&nbsp;&nbsp; &nbsp;return IO&#60;T&#62;([=](real_world w){return std::make_pair(std::move(w), a);});</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">template&#60;&#62;</div><div class="code_line">template&#60;typename T, typename U&#62;</div><div class="code_line">auto Monad&#60;IO&#62;::bind(IO&#60;T&#62; ma, std::function&#60;IO&#60;U&#62;(T)&#62; f) -&#62; IO&#60;U&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// возвращаем IO с функцией, которая принимает &quot;мир&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// запускает на нем первое вычисление, получает &quot;следующий мир&quot; и новое значение,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// затем вычисляем функцию от значения, получая новое IO вычисление,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// которое и запускаем над &quot;следующим миром&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return IO&#60;U&#62;([=](real_world w) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;auto world_and_data = ma.run(std::move(w));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;auto next_io = f(world_and_data.second);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return next_io.run(std::move(world_and_data.first));</div><div class="code_line">&nbsp;&nbsp; &nbsp;});</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Теперь определим простейшие функции с IO, работающие через реальные функции с побочными эффектами<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// заводим тип для &quot;ничего&quot;, чтобы не заморачиваться с обработкой void</div><div class="code_line">struct unit {};</div><div class="code_line">&nbsp;</div><div class="code_line">auto putChar(char ch) -&#62; IO&#60;unit&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Создаем IO с функцией, которая принимает &quot;мир&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// и выводит символ на экран, возвращая новый &quot;мир&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// (см. real_world::change)</div><div class="code_line">&nbsp;&nbsp; &nbsp;return IO&#60;unit&#62;([=](real_world w) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return w.change&#60;unit&#62;([=]{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; ch;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return unit{};</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;});</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">auto getChar(unit) -&#62; IO&#60;char&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Создаем IO с функцией, которая принимает &quot;мир&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// и читает символ, возвращая новый &quot;мир&quot; и прочитанный символ</div><div class="code_line">&nbsp;&nbsp; &nbsp;// (см. real_world::change)</div><div class="code_line">&nbsp;&nbsp; &nbsp;return IO&#60;char&#62;([=](real_world w) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return w.change&#60;char&#62;([=]{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char res;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (!std::cin.get(res).good()) return &#39;{text}&#39;; // пока так</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return res;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;});</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Теперь можно уже что-то сделать просто через IO и эти две функции.<br>
Для начала реализуем вывод строк через putChar.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto putLine(std::string str) -&#62; IO&#60;unit&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// если строка пустая, то возвращаем действие ввода-вывода,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// которое выводит символ &#39;\n&#39;,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// и останавливаем рекурсию</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (str.empty()) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return putChar(&#39;\n&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;// возвращаем действие ввода-вывода, которое сначала выводит первый символ строки,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// затем рекурсивно выводит остаток строки</div><div class="code_line">&nbsp;&nbsp; &nbsp;return putChar(str[0]) &#62;&#62; putLine(str.substr(1));</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Теперь функцию считывания строки:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto getLine(unit) -&#62; IO&#60;std::string&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// возвращаем действие ввода-вывода, которое считывает первый символ,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// и если он означает конец строки,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// то возвращает действие ввода-вывода, которое вернет пустую строку,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// в противном же случае считываем(рекурсивно) строку и возвращаем действие ввода-вывода,</div><div class="code_line">&nbsp;&nbsp; &nbsp;// которое вернет сконкатенированную строку из принятого ранее символа и новой строки</div><div class="code_line">&nbsp;&nbsp; &nbsp;return getChar(unit{}) &#62;&#62;= [=](char ch) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (ch == &#39;\n&#39; || ch == &#39;\r&#39; || ch == &#39;{text}&#39;) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return ret&#60;IO&#62;(std::string());</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return getLine(unit{}) &#62;&#62;= [=](std::string str) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return ret&#60;IO&#62;(ch + str);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Ну и проверяем.<br>
Вот такой простой код в do-нотации:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main = do</div><div class="code_line">&nbsp;&nbsp; &nbsp;putLine &quot;What is your name?&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;name &#60;- getLine</div><div class="code_line">&nbsp;&nbsp; &nbsp;putLine (&quot;Nice to meet you, &quot; ++ name ++ &quot;!&quot;)</div></ol></div></div></div></div><br>
будет выглядеть вот так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// формируем вычисление ввода-вывода</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto io_main =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;putLine(&quot;What is your name?&quot;) &#62;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;getLine(unit{}) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#62;&#62;= [=](std::string name) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return putLine(&quot;Nice to meet you, &quot; + name + &quot;!&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// запускаем вычисление</div><div class="code_line">&nbsp;&nbsp; &nbsp;io_main.run(real_world{});</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<a class='tag-url' href='http://ideone.com/WYK5GA' target='_blank'>http://ideone.com/WYK5GA</a>]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643578</guid>
        <pubDate>Tue, 22 Dec 2015 22:08:20 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643578</link>
        <description><![CDATA[D_KEY: Списки тоже монады.<br>
Потому можно написать:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">fun = do</div><div class="code_line">&nbsp;&nbsp; &nbsp;x &#60;- [1, 2, 3]</div><div class="code_line">&nbsp;&nbsp; &nbsp;y &#60;- [4, 5, 6]</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (x, y)</div><div class="code_line">&nbsp;</div><div class="code_line">main = print fun</div></ol></div></div></div></div><br>
И получить:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]</div></ol></div></div></div></div><br>
<br>
На самом деле тут использована do-нотация, которая представляет из себя синтаксический сахар. Рассахаривается это в<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">fun =</div><div class="code_line">&nbsp;&nbsp; &nbsp;[1, 2, 3] &#62;&#62;= \x -&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;[4, 5, 6] &#62;&#62;= \y -&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (x, y)</div></ol></div></div></div></div><br>
<br>
Т.е. так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">fun =</div><div class="code_line">&nbsp;&nbsp; &nbsp;[1, 2, 3] &#62;&#62;= (\x -&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;[4, 5, 6] &#62;&#62;= (\y -&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return (x, y)))</div></ol></div></div></div></div><br>
<br>
Что на крестах выглядит примерно так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto res = mk_list({1, 2, 3}) &#62;&#62;= [](auto x) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return mk_list({4, 5, 6}) &#62;&#62;= [=](auto y) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return ret&#60;list&#62;(std::make_pair(x, y));</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">};</div></ol></div></div></div></div><br>
<br>
С тем же результатом:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]</div></ol></div></div></div></div><br>
<br>
Для этого нужно сделать списки и реализовать для них монаду.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">список(на основе вектора)</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">struct list : private std::vector&#60;T&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;using impl = std::vector&#60;T&#62;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;using impl::value_type;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;list() = default;</div><div class="code_line">&nbsp;&nbsp; &nbsp;list(std::initializer_list&#60;T&#62; il)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;: std::vector&#60;T&#62;(std::move(il))</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;using impl::push_back;</div><div class="code_line">&nbsp;&nbsp; &nbsp;using impl::insert;</div><div class="code_line">&nbsp;&nbsp; &nbsp;using impl::begin;</div><div class="code_line">&nbsp;&nbsp; &nbsp;using impl::end;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">auto mk_list(std::initializer_list&#60;T&#62; il) -&#62; list&#60;T&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return list&#60;T&#62;(il);</div><div class="code_line">}</div></ol></div></div></div></div><br>
</div></div><br>
Реализуем монаду для списка:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template&#60;&#62;</div><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">auto Monad&#60;list&#62;::ret(T a) -&#62; list&#60;T&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// заворачиваем объект в список</div><div class="code_line">&nbsp;&nbsp; &nbsp;return list&#60;T&#62;{a};</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">template&#60;&#62;</div><div class="code_line">template&#60;typename T, typename U&#62;</div><div class="code_line">auto Monad&#60;list&#62;::bind(list&#60;T&#62; ma, std::function&#60;list&#60;U&#62;(T)&#62; f) -&#62; list&#60;U&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// формируем список списков путем применения к каждому элементу переданной функции</div><div class="code_line">&nbsp;&nbsp; &nbsp;// (которая принимает объект, а возвращает монаду(список))</div><div class="code_line">&nbsp;&nbsp; &nbsp;list&#60;list&#60;U&#62; &#62; tmp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::transform(ma.begin(), ma.end(), std::back_inserter(tmp), f);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// конкатенируем списки в один</div><div class="code_line">&nbsp;&nbsp; &nbsp;list&#60;U&#62; res;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (auto &amp; v : tmp) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;res.insert(res.end(), v.begin(), v.end());</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return res;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Ну и для вывода пара вспомогательных функций:<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">вывод пар и списков</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template&#60;typename T, typename U&#62;</div><div class="code_line">std::ostream &amp; operator &#60;&#60; (std::ostream &amp; os, std::pair&#60;T,U&#62; p)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;os &#60;&#60; &quot;(&quot; &#60;&#60; p.first &#60;&#60; &quot;,&quot; &#60;&#60; p.second &#60;&#60; &quot;)&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return os;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">std::ostream &amp; operator &#60;&#60; (std::ostream &amp; os, const list&#60;T&#62; &amp; a)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;os &#60;&#60; &quot;[&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int i = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (auto &amp; e : a) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (i++) os &#60;&#60; &quot;,&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;os &#60;&#60; e;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;os &#60;&#60; &quot;]&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return os;</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
<br>
<a class='tag-url' href='http://ideone.com/bJjEW3' target='_blank'>http://ideone.com/bJjEW3</a>]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643566</guid>
        <pubDate>Tue, 22 Dec 2015 20:07:14 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643566</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643561'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T19:34:26+00:00">22.12.15, 19:34</time></span><div class='quote '>Да любой код на C++ уже считай монада. Операции идут одна за другой - чем не монада?</div></div><br>
Ну да, в принципе, монада. Почти IO, только захардкоженная.<br>
Другое дело, что писать свои монады в таком же виде нельзя.<br>
Да и смысла считать это монадой особого нет. C++ изначально ничего не говорит о чистоте.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643561</guid>
        <pubDate>Tue, 22 Dec 2015 19:34:26 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643561</link>
        <description><![CDATA[applegame: Да любой код на C++ уже считай монада. Операции идут одна за другой - чем не монада?]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643536</guid>
        <pubDate>Tue, 22 Dec 2015 17:32:13 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643536</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643525'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T16:29:56+00:00">22.12.15, 16:29</time></span><div class='quote '>Поскольку в C++ нет сопоставления с образцом, пользы от fail нет никакой.</div></div><br>
А может ли служить в Цэ++ в качестве &quot;сопоставления с образцом&quot; - std::type_info (в частности std::type_info::before)? <br>
Если конечно я правильно начинаю осознавать реальность  :lol: <br>
В случае наследования с использованием RTTI, мы сможем вырвать кусок у объекта на произвольном уровне иерархии (с помощью его конструктора). А вот если нужный нам конструктор отсутствует в иерархии - тогда и нужно выкидывать fail. Кстати, а как его в Цэ++ реализовать, исключение бросить штоле?<br>
<br>
Извини, что достаю вопросами. Просто пока не могу распознать ценности всего этого для меня. <br>
<br>
Попутно еще одни вопрос. Многие в процессе моделирования используют/манипулируют понятиями Шаблоны Проектирования (ну или Паттерны). И это безотностительно к какому-то конкретному ЯП. Рассматриваемые &quot;монады&quot; какой(или какие совокупности) из паттернов реализуют? И вообще можно ли так говорить относительно монад?]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643525</guid>
        <pubDate>Tue, 22 Dec 2015 16:29:56 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643525</link>
        <description><![CDATA[D_KEY: Ну вот простой пример(имей в виду, что return - это не императивный return, а функция, которая, грубо говоря, заворачивает значение в нашу монаду):<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">-- Функция, которая возвращает действие ввода/вывода,</div><div class="code_line">-- в котором завернут Nothing, явно типизированный как Maybe Int</div><div class="code_line">fun1 :: IO (Maybe Int)</div><div class="code_line">fun1 = return (Nothing)</div><div class="code_line">&nbsp;</div><div class="code_line">-- функция проверки</div><div class="code_line">testIO = do</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- здесь будет вызван fail, т.к. ждем Just, а приходит Nothing:</div><div class="code_line">&nbsp;&nbsp; &nbsp;(Just x) &#60;- fun1</div><div class="code_line">&nbsp;&nbsp; &nbsp;print x</div></ol></div></div></div></div><br>
<br>
В монаде IO fail кидает ошибку. Проверяем:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main = testIO</div></ol></div></div></div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main: user error (Pattern match failure in do expression...</div></ol></div></div></div></div><br>
<br>
Теперь возьмем другую монаду, где fail означает не ошибку, а какое-то значение. Тут подойдет список:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">-- делаем тоже самое:</div><div class="code_line">&nbsp;</div><div class="code_line">fun2 :: [Maybe Int]</div><div class="code_line">fun2 = return (Nothing) -- тоже что [Nothing]</div><div class="code_line">&nbsp;</div><div class="code_line">-- Проверяем список</div><div class="code_line">testList = do</div><div class="code_line">&nbsp;&nbsp; &nbsp;-- здесь будет вызван fail, т.к. ждем Just, а приходит Nothing:</div><div class="code_line">&nbsp;&nbsp; &nbsp;(Just x) &#60;- fun2</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (x)</div></ol></div></div></div></div><br>
<br>
Для списка fail просто возвращает пустой список. Проверяем:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main = print testList</div></ol></div></div></div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">[]</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-22T16:35:20+00:00">22.12.15, 16:35</time></span></span><br>
Если что, Maybe - это тип, который имеет два конструктора:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">data Maybe a = Just a | Nothing</div></ol></div></div></div></div><br>
<br>
Соответственно, в наших тестах мы выполняем сопоставление с образцом и ждем конструктор Just, а приходит туда Nothing. В случае монадического вычисления с IO мы получаем ошибку, а для монадического вычисления со списками - пустой список. Поскольку в C++ нет сопоставления с образцом, пользы от fail нет никакой. А понимание монад он никак не проясняет(скорее мешает).]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643521</guid>
        <pubDate>Tue, 22 Dec 2015 15:44:10 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643521</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643501'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T12:57:56+00:00">22.12.15, 12:57</time></span><div class='quote '>Он вызывается в случае ошибки сопоставления с образцом внутри монадического вычисления.</div></div><br>
Покажи, плс, на самом коротеньком примере.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643509</guid>
        <pubDate>Tue, 22 Dec 2015 14:09:27 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643509</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643488'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T12:04:49+00:00">22.12.15, 12:04</time></span><div class='quote '>Вместо (ret&lt;value&gt;(10) &gt;&gt;= succ) &gt;&gt;= succ хотелось бы писать ret&lt;value&gt;(10) &gt;&gt;= succ &gt;&gt;= succ, но тут у C++ другая ассоциативность &gt;&gt;= чем в haskell. Можно заменить &gt;&gt;= на какой-нибудь другой оператор, на &amp;, например.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">ret&#60;value&#62;(10) &amp; succ &amp; succ</div></ol></div></div></div></div></div></div><br>
Или на , :D <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">val x = (ret&#60;value&#62;(10), succ, succ, succ, succ);</div></ol></div></div></div></div>]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643501</guid>
        <pubDate>Tue, 22 Dec 2015 12:57:56 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643501</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643499'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T12:42:18+00:00">22.12.15, 12:42</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643496'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T12:33:52+00:00">22.12.15, 12:33</time></span><div class='quote '>Не, fail используется для других ситуаций.</div></div><br>
А каких?</div></div><br>
Он вызывается в случае ошибки сопоставления с образцом внутри монадического вычисления. Ну т.е. когда вы пытаетесь выполнить сопоставления с образцом вот в таком случае:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">do</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">&nbsp;&nbsp; &nbsp;(SomeConstructor x) &#60;- someFun</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div></ol></div></div></div></div><br>
а значение не соответствует образцу(в нашем случае someFun вернул значение с другим конструктором), то будет вызыван fail.<br>
Не уверен, что понятно объяснил :) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-22T12:58:54+00:00">22.12.15, 12:58</time></span></span><br>
Монаду IO реализую или вечером или завтра, сейчас надо работу работать :)]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643499</guid>
        <pubDate>Tue, 22 Dec 2015 12:42:18 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643499</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643496'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T12:33:52+00:00">22.12.15, 12:33</time></span><div class='quote '>Не, fail используется для других ситуаций.</div></div><br>
А каких?]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643496</guid>
        <pubDate>Tue, 22 Dec 2015 12:33:52 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643496</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643493'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T12:21:55+00:00">22.12.15, 12:21</time></span><div class='quote '>Наверное нужен  ;)</div></div><br>
Не, fail используется для других ситуаций.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Я попробовал вместо 10 подставить 10.7f - отработало без ошибок и выдало 12</div></div><br>
Ну так это к неявным преобразованиям в C++ претензии.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>подставил строку &quot;abc&quot; - отказалось собираться вообще</div></div><br>
Так и должно быть.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643493</guid>
        <pubDate>Tue, 22 Dec 2015 12:21:55 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643493</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643488'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T12:04:49+00:00">22.12.15, 12:04</time></span><div class='quote '>fail нам не нужен, остальное можно как-то так изобразить:</div></div><br>
Наверное нужен  ;) Я попробовал вместо 10 подставить 10.7f - отработало без ошибок и выдало 12 ... Хм  ... подставил строку &quot;abc&quot; - отказалось собираться вообще. Значить fail надо как-то определять. Не?]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643488</guid>
        <pubDate>Tue, 22 Dec 2015 12:04:49 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643488</link>
        <description><![CDATA[D_KEY: Пока только просто монады, IO потом попробую изобразить.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class Monad m where</div><div class="code_line">&nbsp;&nbsp;(&#62;&#62;=) :: m a -&#62; (a -&#62; m b) -&#62; m b</div><div class="code_line">&nbsp;&nbsp;(&#62;&#62;) :: m a -&#62; m b -&#62; m b</div><div class="code_line">&nbsp;&nbsp;return :: a -&#62; m a</div><div class="code_line">&nbsp;&nbsp;fail :: String -&#62; m a</div></ol></div></div></div></div><br>
<br>
fail нам не нужен, остальное можно как-то так изобразить:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template&#60;template&#60;class ...&#62; class M&#62;</div><div class="code_line">struct Monad {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// return :: a -&#62; m a</div><div class="code_line">&nbsp;&nbsp; &nbsp;template&#60;typename T&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;static auto ret(T a) -&#62; M&#60;T&#62;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// bind :: m a -&#62; (a -&#62; m b) -&#62; m b</div><div class="code_line">&nbsp;&nbsp; &nbsp;template&#60;typename T, typename U&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;static auto bind(M&#60;T&#62;, std::function&#60;M&#60;U&#62;(T)&#62;) -&#62; M&#60;U&#62;;</div><div class="code_line">};</div></ol></div></div></div></div><br>
Хелперы/операторы:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// return :: a -&#62; m a</div><div class="code_line">template&#60;template&#60;class...&#62; class M, typename T&#62;</div><div class="code_line">auto ret(T a) -&#62; M&#60;T&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return Monad&#60;M&#62;::ret(std::move(a));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// (&#62;&#62;=) :: m a -&#62; (a -&#62; m b) -&#62; m b</div><div class="code_line">template&#60;template&#60;class...&#62; class M, typename T, typename F&#62;</div><div class="code_line">auto operator &#62;&#62;= (M&#60;T&#62; ma, F fun) -&#62; decltype(fun(std::declval&#60;T&#62;())) &nbsp;// запутанно, но не знаю, как сделать лучше, чтобы работали лямбды</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;using R = decltype(fun(std::declval&#60;T&#62;()));</div><div class="code_line">&nbsp;&nbsp; &nbsp;return Monad&#60;M&#62;::bind(ma, std::function&#60;R(T)&#62;(std::move(fun)));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// (&#62;&#62;) :: m a -&#62; m b -&#62; m b</div><div class="code_line">template&#60;template&#60;class...&#62; class M, typename T, typename U&#62;</div><div class="code_line">auto operator &#62;&#62; (M&#60;T&#62; ma, M&#60;U&#62; mb) -&#62; M&#60;U&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return ma &#62;&#62;= [=](T){ return mb; };</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Теперь нужно специализировать Monad&lt;обертка&gt;::ret и Monad&lt;обертка&gt;::bind.<br>
Проверяем на простой монаде:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">struct value { // просто коробка со значением</div><div class="code_line">&nbsp;&nbsp; &nbsp;value(T a)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;: x(a)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;T x;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">// специализируем ret</div><div class="code_line">template&#60;&#62;</div><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">auto Monad&#60;value&#62;::ret(T a) -&#62; value&#60;T&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// заворачиваем в коробку</div><div class="code_line">&nbsp;&nbsp; &nbsp;return value&#60;T&#62;(a);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// специализируем bind</div><div class="code_line">template&#60;&#62;</div><div class="code_line">template&#60;typename T, typename U&#62;</div><div class="code_line">auto Monad&#60;value&#62;::bind(value&#60;T&#62; d, std::function&#60;value&#60;U&#62;(T)&#62; f) -&#62; value&#60;U&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;// достаем значение, вызываем функцию, которая вернет следующую коробку</div><div class="code_line">&nbsp;&nbsp; &nbsp;return f(d.x);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Проверяем на чем-нибудь простом:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto succ(int x) -&#62; value&#60;int&#62;</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return ret&#60;value&#62;(x + 1);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto v = (ret&#60;value&#62;(10) &#62;&#62;= succ) &#62;&#62;= succ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; v.x &#60;&#60; std::endl;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">12</div></ol></div></div></div></div><br>
<br>
Вместо (ret&lt;value&gt;(10) &gt;&gt;= succ) &gt;&gt;= succ хотелось бы писать ret&lt;value&gt;(10) &gt;&gt;= succ &gt;&gt;= succ, но тут у C++ другая ассоциативность &gt;&gt;= чем в haskell. Можно заменить &gt;&gt;= на какой-нибудь другой оператор, на &amp;, например.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">ret&#60;value&#62;(10) &amp; succ &amp; succ</div></ol></div></div></div></div><br>
<br>
<a class='tag-url' href='http://ideone.com/9AHtv1' target='_blank'>http://ideone.com/9AHtv1</a>]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643485</guid>
        <pubDate>Tue, 22 Dec 2015 11:51:36 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643485</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643482'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T11:33:20+00:00">22.12.15, 11:33</time></span><div class='quote '>Эм. Функциональные языки - это декларативные языки. Как, например, и логические.</div></div><br>
Ну да, эт я плаваю :rolleyes: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-22T11:54:42+00:00">22.12.15, 11:54</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643482'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T11:33:20+00:00">22.12.15, 11:33</time></span><div class='quote '>Могу попробовать накидать монады + реализацию монады IO на C++, если интересно. </div></div><br>
Интересно&#33; <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-22T11:56:05+00:00">22.12.15, 11:56</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643482'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T11:33:20+00:00">22.12.15, 11:33</time></span><div class='quote '>Как, например, и логические.</div></div><br>
Точно&#33; Читал доку по Эрлангу, видел там вычисление функции как последовательность утверждений, де жа вю ... Пролог.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643482</guid>
        <pubDate>Tue, 22 Dec 2015 11:33:20 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643482</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643470'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T10:51:13+00:00">22.12.15, 10:51</time></span><div class='quote '><strong class='tag-b'>Вопрос:</strong> функция, использующая функцию с побочными эффектами, имеет побочные эффекты (если все остальное - чистые вычисления)?</div></div><br>
Да. В Haskell монада IO &quot;заражает&quot; код. И просто так из монадического вычисления результат не достать. Он доступен только внутри вычисления.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Эрланг - в большей части декларативный язык, нежели функциональный.</div></div><br>
Эм. Функциональные языки - это декларативные языки. Как, например, и логические.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Сопоставления по образцу вообще порадовали</div></div><br>
Они есть, наверное, во всех функциональных языках. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-22T11:34:40+00:00">22.12.15, 11:34</time></span></span><br>
Могу попробовать накидать монады + реализацию монады IO на C++, если интересно. Но без do-нотации читать монадические выражения не так просто :)]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643470</guid>
        <pubDate>Tue, 22 Dec 2015 10:51:13 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643470</link>
        <description><![CDATA[JoeUser: Нашел небольшой <a class='tag-url' href='https://anton-k.github.io/ru-haskell-book/book/toc.html' target='_blank'>мануал по Хаскелю</a>. Без пал-литры не разбересся&#33;  :wacko:<br>
 <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643441'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-22T08:09:06+00:00">22.12.15, 08:09</time></span><div class='quote '>Побочные эффекты есть не у всех монад,</div></div><br>
Прочел по монады ... по верхам все вроде ясно. Но в фундаментальных вопросах (скорее в терминологии) плыву  :-? <br>
<strong class='tag-b'>Вопрос:</strong> функция, использующая функцию с побочными эффектами, имеет побочные эффекты (если все остальное - чистые вычисления)? Ну или класс, один из методов которого имеет побочные эффекты? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-22T11:24:41+00:00">22.12.15, 11:24</time></span></span><br>
Еще пробежался по <a class='tag-url' href='http://github.com/dyp2000/Russian-Armstrong-Erlang/raw/master/pdf/fullbook.pdf' target='_blank'>мануалу Эрланга</a>. Похоже <strong class='tag-b'>korvin</strong> таки прав, Эрланг - в большей части декларативный язык, нежели функциональный. Не знаю как вам, мне показался более понятным по концепции. Сопоставления по образцу вообще порадовали - в духе регулярок Перла, правда с несколько другим применением. А вот однократное присваивание значений сразу приводит к мысли ожидаемой излишней траты памяти. Ну это так, по верхам.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643441</guid>
        <pubDate>Tue, 22 Dec 2015 08:09:06 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643441</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643395'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T22:54:37+00:00">21.12.15, 22:54</time></span><div class='quote '>Смысл монады не в интерфейсе, а в абстракции побочных эффектов.</div></div><br>
Ну скорее в абстракции цепочки вычислений или даже абстракции связей в цепочке вычислений. Побочные эффекты есть не у всех монад, вроде даже большая часть вполне чистые. Да и IO &quot;грязь&quot; скрывает через RealWorld, т.е. строится через RealWorld -&gt; (RealWorld, a).<br>
<br>
Впрочем, я, возможно, так и не понял монады, хотя вроде разобрался, как это дело работает :D <br>
С технической точки зрения там как-то все неэффективно выходит. Надо будет глянуть, оптимизирует ли их тот же ghc.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643395</guid>
        <pubDate>Mon, 21 Dec 2015 22:54:37 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643395</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643389'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T21:55:07+00:00">21.12.15, 21:55</time></span><div class='quote '>Монады-то можно и прикрутить. Даже в C++ я препятствий не вижу к этому.</div></div><br>
Смысл монады не в интерфейсе, а в абстракции побочных эффектов. Хотя в C++ был бы полезен и интерфейс для, например, future.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643389'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T21:55:07+00:00">21.12.15, 21:55</time></span><div class='quote '>Вот do-нотацию заменить сложнее</div></div><br>
Так код на Erlang сам по себе и есть do-нотация :yes: <strong class='tag-b'>korvin</strong> подтвердит.]]></description>
        <author>MyNameIsIgor</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643389</guid>
        <pubDate>Mon, 21 Dec 2015 21:55:07 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643389</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643362'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:43:24+00:00">21.12.15, 19:43</time></span><div class='quote '>а в сторону функциональщины он сделал лишь пару небольших шагов от Си.</div></div><br>
Есть мнение, что они шли не от Си :) <br>
Я тоже не понимаю, чем тебе erlang не угодил... <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-21T21:57:46+00:00">21.12.15, 21:57</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643116'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2015-12-20T15:21:32+00:00">20.12.15, 15:21</time></span><div class='quote '><strong class='tag-b'>D_KEY</strong>, ну например, имея несколько, можно много, источников данных, например, файлов, по запросам отдавать их контент. Запросы могут приходить к разным источникам данных, а могут и к одному, контент запрашиваться из разных регионов источников, например, по разным смещениям от начала файлов, активных запросов может быть несколько в одно время, запросы на данные из некоего источника среднестатически запрашивают их последовательно расположенными порциями со среднестатически одинаковой периодичностью, но это не всегда так.<br>
Короче, тут больше над кодом клиента надо работать для получения объективных оценок кода сервера.</div></div><br>
Можно, в принципе, попробовать. Правда если внимательно посмотреть на тему, то придется сравнивать erlang и haskell :) <br>
<br>
<strong class='tag-b'>korvin</strong>, ты как? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-21T21:59:06+00:00">21.12.15, 21:59</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643351'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:15:24+00:00">21.12.15, 19:15</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643349'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:10:06+00:00">21.12.15, 19:10</time></span><div class='quote '>Нет. Но Эрланг не совсем в сторону функциональщины двигался же.</div></div><br>
А куда он двигался? Что тебя смущает? Отсутствие монад?</div></div><br>
Монады-то можно и прикрутить. Даже в C++ я препятствий не вижу к этому. Вот do-нотацию заменить сложнее :)]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643363</guid>
        <pubDate>Mon, 21 Dec 2015 19:44:40 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643363</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643362'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:43:24+00:00">21.12.15, 19:43</time></span><div class='quote '>в сторону функциональщины он сделал лишь пару небольших шагов от Си</div></div><br>
Есть какие-то объективные мерки?]]></description>
        <author>MyNameIsIgor</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643362</guid>
        <pubDate>Mon, 21 Dec 2015 19:43:24 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643362</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643358'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:32:27+00:00">21.12.15, 19:32</time></span><div class='quote '>Ну, он же лишён деструктивных присваиваний. Да, функции, влияющие на глобальное окружение не отделены, потому исполняется всё последовательно. Но это явно не C.</div></div><br>
А кто запрещает не использовать деструктивные присваивания в Си? Но дело не в этом.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643358'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:32:27+00:00">21.12.15, 19:32</time></span><div class='quote '>Из этого следует, что любой язык, дающий возможность программисту управлять конкурентными процессами, а не делающий это автоматически, недалеко ушёл от C в части функциональщины</div></div><br>
Нет, из этого лишь следует, что в Эрланге внимание акцентировано на другом, а в сторону функциональщины он сделал лишь пару небольших шагов от Си.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643358</guid>
        <pubDate>Mon, 21 Dec 2015 19:32:27 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643358</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643356'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:26:26+00:00">21.12.15, 19:26</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643351'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:15:24+00:00">21.12.15, 19:15</time></span><div class='quote '>А куда он двигался? Что тебя смущает? Отсутствие монад?</div></div><br>
В concurrency. А меня ничего не смущает. =)</div></div><br>
Ну, он же лишён деструктивных присваиваний. Да, функции, влияющие на глобальное окружение не отделены, потому исполняется всё последовательно. Но это явно не C. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-21T19:35:42+00:00">21.12.15, 19:35</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643356'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:26:26+00:00">21.12.15, 19:26</time></span><div class='quote '>Ну, кроме того, что конкурентные процессы не чисты by-design.</div></div><br>
Из этого следует, что любой язык, дающий возможность программисту управлять конкурентными процессами, а не делающий это автоматически, недалеко ушёл от C в части функциональщины]]></description>
        <author>MyNameIsIgor</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643356</guid>
        <pubDate>Mon, 21 Dec 2015 19:26:26 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643356</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643351'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:15:24+00:00">21.12.15, 19:15</time></span><div class='quote '>А куда он двигался? Что тебя смущает? Отсутствие монад?</div></div><br>
В concurrency. А меня ничего не смущает. =) Ну, кроме того, что конкурентные процессы не чисты by-design.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643352</guid>
        <pubDate>Mon, 21 Dec 2015 19:16:04 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643352</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643349'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:10:06+00:00">21.12.15, 19:10</time></span><div class='quote '>У тебя пиратский гугл.</div></div><br>
Спасибо за наводку :yes: <br>
+1.]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643351</guid>
        <pubDate>Mon, 21 Dec 2015 19:15:24 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643351</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643349'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:10:06+00:00">21.12.15, 19:10</time></span><div class='quote '>Нет. Но Эрланг не совсем в сторону функциональщины двигался же.</div></div><br>
А куда он двигался? Что тебя смущает? Отсутствие монад?]]></description>
        <author>MyNameIsIgor</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643349</guid>
        <pubDate>Mon, 21 Dec 2015 19:10:06 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643349</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643346'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:04:22+00:00">21.12.15, 19:04</time></span><div class='quote '>На шелловскую команду тоже не тянет :D </div></div><br>
Это и не шелловская команда.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643346'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:04:22+00:00">21.12.15, 19:04</time></span><div class='quote '>Какой обалдуй будет писать такой символ, который на клаве не набрать одной клавишей :lool: </div></div><br>
Такой, который хочет показать, что это спец-символ и не принадлежит языку, а обозначает что-то другое. А то некоторые вот путают...<br>
Скажи, а если б там символ &gt; стоял вместо этого, что бы ты подумал?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643346'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:04:22+00:00">21.12.15, 19:04</time></span><div class='quote '>И да, гугля молчит о нем как рыба об лед.</div></div><br>
У тебя пиратский гугл.<br>
<a class='tag-url' href='https://en.wikipedia.org/wiki/Therefore_sign' target='_blank'>https://en.wikipedia.org/wiki/Therefore_sign</a><br>
<a class='tag-url' href='https://www.quora.com/Punctuation/What-does-three-dots-mean-%E2%88%B4' target='_blank'>https://www.quora.com/Punctuation/What-does...-mean-%E2%88%B4</a> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-21T19:12:52+00:00">21.12.15, 19:12</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643348'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T19:08:50+00:00">21.12.15, 19:08</time></span><div class='quote '>Все языки с вызовом по значению недалеко ушли?</div></div><br>
Нет. Но Эрланг не совсем в сторону функциональщины двигался же.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643348</guid>
        <pubDate>Mon, 21 Dec 2015 19:08:50 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643348</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643344'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T18:57:22+00:00">21.12.15, 18:57</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643326'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T18:15:12+00:00">21.12.15, 18:15</time></span><div class='quote '>:wacko:</div></div><br>
Ну а что? Не так уж сильно далеко от Си Эрланг ушёл в этом плане. Подумаешь, TCO есть... =)</div></div><br>
Не понимаю, почему недалеко. Все языки с вызовом по значению недалеко ушли?]]></description>
        <author>MyNameIsIgor</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643346</guid>
        <pubDate>Mon, 21 Dec 2015 19:04:22 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643346</link>
        <description><![CDATA[Oleg2004: На шелловскую команду тоже не тянет :D <br>Какой обалдуй будет писать такой символ, который на клаве не набрать одной клавишей :lool: <br>И да, гугля молчит о нем как рыба об лед. :(]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643344</guid>
        <pubDate>Mon, 21 Dec 2015 18:57:22 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643344</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643337'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T18:48:07+00:00">21.12.15, 18:48</time></span><div class='quote '>Для меня совсем не очевидно.<br>
В легальном коде стоит некий знак - ну типа стрелка, или :=.<br>
Очевиднее, что эта комбинация легальна...тем более что она пишется как само собой разумеющееся, обыденное, без расшифровки.<br>
Впрочем теперь понимание этого знака для меня неактуально. <br>
Хотя история его возникновения интересна сама по себе.</div></div><br>
Я конечно понимаю, что 5 = 6 или 2009/10/22 = 2009/10/23 -- вполне легальные конструкции, но всё-таки Игорь прав, из листингов вполне очевидно, что выражения, помеченные этим знаком, не являются строками из исходников. Как будто ты никогда шелл prompt &#036; никогда не видел? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-21T19:04:22+00:00">21.12.15, 19:04</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643326'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T18:15:12+00:00">21.12.15, 18:15</time></span><div class='quote '>:wacko:</div></div><br>
Ну а что? Не так уж сильно далеко от Си Эрланг ушёл в этом плане. Подумаешь, TCO есть... =)]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643337</guid>
        <pubDate>Mon, 21 Dec 2015 18:48:07 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643337</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643333'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T18:41:08+00:00">21.12.15, 18:41</time></span><div class='quote '>Ну, очевидно же, что к языку этот знак не относится. Он означает что-то вроде &quot;вывод на консоль&quot;. </div></div><br>
Для меня совсем не очевидно.<br>
В легальном коде стоит некий знак - ну типа стрелка, или :=.<br>
Очевиднее, что эта комбинация легальна...тем более что она пишется как само собой разумеющееся, обыденное, без расшифровки.<br>
И в первых абзацах ВВЕДЕНИЯ&#33;&#33;&#33;<br>
Те более что в такой записи это на вывод вообще не тянет<br>
∴ 5 = 6<br>
<br>
Впрочем теперь понимание этого знака для меня неактуально. <br>
Хотя история его возникновения интересна сама по себе. :)]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643333</guid>
        <pubDate>Mon, 21 Dec 2015 18:41:08 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643333</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643331'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T18:35:49+00:00">21.12.15, 18:35</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643314'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T17:38:10+00:00">21.12.15, 17:38</time></span><div class='quote '>Цитата Oleg2004 @ Вчера, 19:41<br>
∴ x = 5<br>
А откуда ты это взял? Ни разу не встречался с таким символом. И гугл ничего не говорит.</div></div><br>
Блин, еле раскопал ссылку где я это <a class='tag-url' href='http://learnyousomeerlang.com/introduction#what-is-erlang' target='_blank'> видел </a><br>
Там таких знаков хватает. &lt;_&lt;</div></div><br>
Ну, очевидно же, что к языку этот знак не относится. Он означает что-то вроде &quot;вывод на консоль&quot;.]]></description>
        <author>MyNameIsIgor</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643331</guid>
        <pubDate>Mon, 21 Dec 2015 18:35:49 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643331</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643314'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T17:38:10+00:00">21.12.15, 17:38</time></span><div class='quote '>Цитата Oleg2004 @ Вчера, 19:41<br>
∴ x = 5<br>
А откуда ты это взял? Ни разу не встречался с таким символом. И гугл ничего не говорит.</div></div><br>
Блин, еле раскопал ссылку где я это <a class='tag-url' href='http://learnyousomeerlang.com/introduction#what-is-erlang' target='_blank'> видел </a><br>
Там таких знаков хватает. &lt;_&lt;]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643328</guid>
        <pubDate>Mon, 21 Dec 2015 18:16:33 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643328</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643318'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T17:51:54+00:00">21.12.15, 17:51</time></span><div class='quote '>А вообще, похоже, тебе эта тема на самом деле совсем не интересна, иначе ты потрудился бы ознакомиться с предметом чуть более глубже, чем &quot;а я вот тут в рукипедии прочитал такую фигню и нифига не понимаю&quot;. </div></div><br>
Не, не похоже. Если бы все знал, убил бы кучу времени на разборки, скорее всего бы и не спрашивал. Ну, а раз спросил, интерес все же есть. Небольшой, но есть.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643318'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T17:51:54+00:00">21.12.15, 17:51</time></span><div class='quote '>Например:</div></div><br>
Я это прочел, как &quot;наиболее значимые&quot; (ну, которые в области внимания). Не будешь же ты специально приводить незначимые?  ;) <br>
<br>
А вообще, попутно выяснял для себя еще один вопрос. Многие прямым текстом пишут &quot;Перл - птичий язык&quot;. До селе не мог понять причину. Что не так? Сейчас ситуация немножко прояснилась. Для меня что Эрланг, что Хаскель - тоже птичьи. А причина, скорое всего, не в самом синтаксисе. Причина в отсутствии понимания (+отсутствия практики применения) концепций языка, возможностей, &quot;вкусностей&quot;.<br>
<br>
Так что, твой комент был не лишним, и сэкономил мне немножко времени. Пасип  :rolleyes:]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643326</guid>
        <pubDate>Mon, 21 Dec 2015 18:15:12 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643326</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643314'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2015-12-21T17:38:10+00:00">21.12.15, 17:38</time></span><div class='quote '>В Эрланге функциональщины почти столько же, сколько и в Си.</div></div><br>
:wacko:]]></description>
        <author>MyNameIsIgor</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643318</guid>
        <pubDate>Mon, 21 Dec 2015 17:51:54 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643318</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3642873'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2015-12-18T16:39:48+00:00">18.12.15, 16:39</time></span><div class='quote '>1) по каким критериям можно сравнить два функциональных языка, например, этих сабжевых?</div></div><br>
Например:<br>
- &quot;ленивый&quot; (Haskell, Clean, Miranda) или &quot;энергичный&quot; (*ML, F#, Scala, Clojure, Scheme)<br>
- чистый (т.е. строго и явно разделяющий чистые и грязные функции. Haskell, Clean, Miranda) или допускающий свободное использование побочных эффектов и других парадигм (*ML, F#, Scala, Clojure, Scheme)<br>
- статически типизированный (Haskell, Clean, Miranda, *ML, F#, Scala) или динамически-типизированный (Clojure, Scheme)<br>
<br>
А вообще, похоже, тебе эта тема на самом деле совсем не интересна, иначе ты потрудился бы ознакомиться с предметом чуть более глубже, чем &quot;а я вот тут в рукипедии прочитал такую фигню и нифига не понимаю&quot;.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643317</guid>
        <pubDate>Mon, 21 Dec 2015 17:49:59 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643317</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643139'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-20T17:41:00+00:00">20.12.15, 17:41</time></span><div class='quote '>как их набрать на клаве?</div></div>Alt+8756 на цифровой. :)]]></description>
        <author>Славян</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643314</guid>
        <pubDate>Mon, 21 Dec 2015 17:38:10 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643314</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643139'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-20T17:41:00+00:00">20.12.15, 17:41</time></span><div class='quote '>∴ x = 5</div></div><br>
А откуда ты это взял? Ни разу не встречался с таким символом. И гугл ничего не говорит.<br>
<br>
<br>
<br>
Что же касается темы. В Эрланге функциональщины почти столько же, сколько и в Си. Ну или в джава-скрипте. Как его сравнивать с Хаскеллом?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643139</guid>
        <pubDate>Sun, 20 Dec 2015 17:41:00 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643139</link>
        <description><![CDATA[Oleg2004: Кто пояснит, что означает такая конструкция на Эрланге - а точнее что означают три точки - и как их набрать на клаве?  :wacko: <br>
∴ x = 5<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643116'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2015-12-20T15:21:32+00:00">20.12.15, 15:21</time></span><div class='quote '>а в том, что на нём можно писать программы, сделать которые непадучими тяжело. </div></div><br>
Если идти эрланговским путем и сделать для исполнения кода С++ некую виртуальную оболочку типа VM или фреймворка, упаковать это все в одно целое - то почему нет? Именно это обстоятельство и дает Эрланговским узлам такое преимущество. <br>
Просто для приложений С++ этого не надо.<br>
У него совсем другая ниша.<br>
Хватает того, что все сокетные операции в эрланг-модулях gen_tcp, gen_udp, gen_sctp<br>
сделаны на С++(для стека TCP/IP другого программного интерфейса, кроме сокетов Беркли и их клона Winsоck)просто нет.<br>
А если честно говорить, я сегодня впервые почитал про Эрланг и идеологию его исполнения, и пришел к мнению, что для определенных видов сетевых приложений это неплохая штука. :yes:<br>
И да, таки я оказался прав в своем представлении:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> Мое первое знакомство с Erlang состоялось в июле 2012-го, но зарабатывать программированием на этом языке я начал только год назад, 19 ноября 2012. В сей заметке я хотел бы поделиться своими впечатлениями от практического использования Erlang на протяжении всего этого времени. Erlang — не функциональный, а скорее объектно-ориентированный, и вовсе не язык программирования, <strong class='tag-b'>а фреймворк для создания распределенных отказоустойчивых приложений.</strong> Ну или не очень отказоустойчивых и не очень распределенных, тут уж как напишите. Почему фреймворк — понятно, вся мощь Erlang’а заключается в Open Telecom Platform, включающей в себя поведения gen_server, gen_event и другие, а также ETS, Mnesia и так далее. </div></div><br>
Спасибо ТС за тему, она была для меня полезной.<br>
Так что для меня после ознакомления со всеми делами вопрос закрыт... :)]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643116</guid>
        <pubDate>Sun, 20 Dec 2015 15:21:32 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643116</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>Oleg2004</strong>, Степан Кольцов неверно выразился. Проблема C++ не в том, что на нём тяжело писать непадучие программы, а в том, что на нём можно писать программы, сделать которые непадучими тяжело. Однако вполне можно игнорировать эту фичу, но это требует знаний и опыта. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-20T15:29:32+00:00">20.12.15, 15:29</time></span></span><br>
<strong class='tag-b'>D_KEY</strong>, ну например, имея несколько, можно много, источников данных, например, файлов, по запросам отдавать их контент. Запросы могут приходить к разным источникам данных, а могут и к одному, контент запрашиваться из разных регионов источников, например, по разным смещениям от начала файлов, активных запросов может быть несколько в одно время, запросы на данные из некоего источника среднестатически запрашивают их последовательно расположенными порциями со среднестатически одинаковой периодичностью, но это не всегда так.<br>
Короче, тут больше над кодом клиента надо работать для получения объективных оценок кода сервера.]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643103</guid>
        <pubDate>Sun, 20 Dec 2015 13:39:52 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643103</link>
        <description><![CDATA[Oleg2004: Вот <a class='tag-url' href='http://habrahabr.ru/post/157583/' target='_blank'> здесь </a> приводится ерланговский код для задачи о перестановках. В конце комментов приводится сишный код для той же задачи - вполне конкурентный с ерланговским. И читается вполне удобно и понятно. :)<br>
И вот<a class='tag-url' href='http://habrahabr.ru/company/yandex/blog/230775/' target='_blank'> еще </a> интересные откровения разрабоотчиков с Яндекса - какой язык кто и за что любит и работает на нем. Прочитал с удовольствием.<br>
Нашел и такое откровение:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Мой мимолетный опыт с функциональщиной (oCaml) закончился этим: невменяемость и ахинея. Я принимаю, что это могут быть лично мои заморочки, либо мои императивные боги сильно против языколожства. </div></div> :)<br>
Там же на Яндексе:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Но в будущем все будут писать на Rust. Rust — это моя любимая тема. Я всем рассказываю про Rust. Проблема C++  в том, что хотя программы получаются быстрыми, но написать их на нём так, чтобы они не падали, очень тяжело. Язык дает очень мало гарантий безопасности. Java дает очень много гарантий, но не позволяет писать программы так, чтобы они быстро работали. Rust, с одной стороны, позволяет писать безопасные программы, с другой — очень быстрые. Поэтому мой любимый язык программирования — это Rust. Но он еще не дошел до такого состояния, чтобы его можно было использовать, и будет таким лет через пять.</div></div><br>
Вот это для меня открытие...все переходим на RUST... а что это за зверь?<br>
Не знаю, надо смотреть.<br>
Вот <a class='tag-url' href='http://www.gamedev.ru/code/forum/?id=191459&page=2' target='_blank'>  обсуждение на Gamedev </a><br>
Приводится код TCP-сервера на Эрланге. Все существенно сложнее чем на С++.<br>
Очень понравился луркморный обзор <a class='tag-url' href='https://lurkmore.co/Erlang#.C2.ABHello.2C_Joe.21_Hello.2C_Mike.21.C2.BB_.E2.86.92' target='_blank'> Эрланга </a> :)]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643099</guid>
        <pubDate>Sun, 20 Dec 2015 12:36:19 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643099</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643061'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2015-12-20T01:50:58+00:00">20.12.15, 01:50</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643046'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T21:41:07+00:00">19.12.15, 21:41</time></span><div class='quote '>Так давайте какую-нибудь задачку придумаем </div></div>Какой-нибудь микросимулятор Ютуба подойдёт?</div></div><br>
Возможно, только расскажи подробнее, что имеешь в виду :)]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643061</guid>
        <pubDate>Sun, 20 Dec 2015 01:50:58 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643061</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643046'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T21:41:07+00:00">19.12.15, 21:41</time></span><div class='quote '>Так давайте какую-нибудь задачку придумаем </div></div>Какой-нибудь микросимулятор Ютуба подойдёт?]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643054</guid>
        <pubDate>Sat, 19 Dec 2015 22:36:10 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643054</link>
        <description><![CDATA[Oleg2004: Спасибо.<br>
Хорошая выборка основных понятий и процессов.<br>
Основное резюме - что я посчитал важным - это семантическая сеть, покрывающая свои требования по реализации за счет распределенной сети виртуальных узлов с центром (или центрами?) управления. <br>
Фактически это распределенная задача по обработке текстовой информации самых разных форматов.<br>
Естественно, что задачка про Хелло ворлд тут рядом не лежала. :D <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-19T22:51:29+00:00">19.12.15, 22:51</time></span></span><br>
Ну и под занавес.<br>
Я достаточно долго работаю в области теории и практики компиляции языков высокого уровня.<br>
И знаком со многими языками программирования.<br>
И мое глубочайшее убеждение - КАЖДЫЙ современный язык имеет свою собственную нишу применения. Классификаций языков программирования - вагон и малая тележка. Языки в подавляющем большинстве создаются не для того, чтобы конкурировать - а для того, чтобы закрывать новые потребности. Возникают новые парадигмы, новые задачи, и под них создаются конкретные языки программирования. А потому такие сравнения, типа С++ vs Erlang - неправомерны и ущербны в своей сути. ИМХО. :) <br>
Простой пример - ну как можно сравнить XML и С++??? :wall:<br>
Или HTML и С++?? А ведь и HTML, и XML - это языки, имеющие огромное значение в телекоммуникационном (т.е. по простому - в удаленном) взаимодействии. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-19T23:00:59+00:00">19.12.15, 23:00</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643053'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T22:26:49+00:00">19.12.15, 22:26</time></span><div class='quote '>Естественно, что приложив определенные усилия, можно сделать лучшее решение на C++. </div></div><br>
И тут вы правы.<br>
В свое время лет 35 тому назад у меня был коллега, высококлассный программист, который знал только один язык - Фортран. Он мне как то сказал - я на этом языке могу написать программу для любой задачи. Любой.<br>
Он был прав. По своему. Но Фортран - не предназначен для текстовой обработки. И такая программа была бы просто уродлива скорее всего.]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643053</guid>
        <pubDate>Sat, 19 Dec 2015 22:26:49 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643053</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Erlang [ˈɜːlæŋ][2] — функциональный язык программирования со строгой динамической типизацией, <strong class='tag-b'>предназначенный для создания распределённых вычислительных систем. Разработан и поддерживается компанией Ericsson.</strong> Язык включает в себя средства порождения параллельных легковесных процессов и их взаимодействия через обмен асинхронными сообщениями в соответствии с моделью акторов.<br>
<br>
Erlang был целенаправленно <strong class='tag-b'>разработан для применения в распределённых, отказоустойчивых, параллельных системах реального времени</strong>[⇨], для которых кроме средств самого языка имеется стандартная библиотека модулей[⇨] и библиотека шаблонных решений (так называемых поведений) — фреймворк OTP (англ. Open Telecom Platform)[⇨]. Программа на Erlang транслируется в байт-код, исполняемый виртуальными машинами, находящимися на различных узлах распределённой[⇨] вычислительной сети. Erlang-системы поддерживают горячую замену кода[⇨], что позволяет эксплуатировать оборудование безостановочно.<br>
<br>
Свой синтаксис и некоторые концепции Erlang унаследовал от языка логического программирования Пролог[3]. Язык поддерживает многие типы данных[⇨], условные конструкции[⇨], сопоставление с образцом[⇨], обработку исключений[⇨], списковые включения[⇨] и выражения битовых строк[⇨], функции[⇨] (анонимные функции[⇨], функции высшего порядка, рекурсивные определения функций, оптимизацию хвостовой рекурсии), модули[⇨], приём и отправку сообщений[⇨] между процессами. Препроцессор[⇨] поддерживает работу с макросами и включение заголовочных файлов.<br>
<br>
<strong class='tag-b'>Популярность Erlang начала расти в связи с расширением его области применения (телекоммуникационные системы) на высоконагруженные параллельные распределённые системы, обслуживающие миллионы пользователей WWW, такие как чаты, системы управления содержимым, веб-серверы и распределённые, требующие масштабирования базы данных. Erlang применяется в нескольких NoSQL-базах данных высокой доступности</strong>[4].</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-19T22:29:52+00:00">19.12.15, 22:29</time></span></span><br>
И как заточенный под конкретное применение инструмент, он вполне может быть лучше решения, написанного на языке общего назначения. Естественно, что приложив определенные усилия, можно сделать лучшее решение на C++. Просто это дополнительное время и дополнительные деньги(или заранее заложенные в проект требования, что тоже не бесплатно). <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-19T22:33:07+00:00">19.12.15, 22:33</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643052'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T22:23:03+00:00">19.12.15, 22:23</time></span><div class='quote '>что такое - телекоммуникационное приложение? :wall: где Erlang превыше всех???</div></div><br>
Ну гугл же есть. Вот, например:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Под телекоммуникационными системами (ТС) принято понимать структуры и средства, предназначенные для передачи больших объёмов информации (как правило, в цифровой форме) посредством специально проложенных линий связи или радиоэфира. При этом предполагается обслуживание значительного количества пользователей систем (от нескольких тысяч). Телекоммуникационные системы включают такие структуры передачи информации, как телевещание (коллективное, кабельное, спутниковое, сотовое), телефонные сети общего пользования (ТфОП), сотовые системы связи (в том числе макро- и микро- сотовые), системы персонального вызова, спутниковые системы связи и навигационное оборудование, волоконные сети передачи информации. </div></div>]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643052</guid>
        <pubDate>Sat, 19 Dec 2015 22:23:03 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643052</link>
        <description><![CDATA[Oleg2004: Я с вами согласен. И  в самом первом своем посте я как раз обратил внимание собеседников на вот это:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>что для изученных <strong class='tag-b'>телекоммуникационных приложений </strong>код на Erlang был на 70-85 % короче, чем на С++, а производительность системы при переписывании кода с С++ на Erlang возросла почти на 100 %.</div></div><br>
и спросил - а ЧТО ЭТО???<br>
что такое - телекоммуникационное приложение? :wall: где Erlang превыше всех???<br>
Дальнейшее - молчание. (с) Гамлет &lt;_&lt;]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643051</guid>
        <pubDate>Sat, 19 Dec 2015 22:12:23 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643051</link>
        <description><![CDATA[D_KEY: Вообще в стартовом сообщение речь несколько о других задачах=) В литературе по Erlang&#39;у попадаются примеры историй, когда переписывание на Erlang дало не только выигрыш в объеме кода и стоимости поддержки, но и в производительности. Благодаря erlang&#39;овской модели многопоточности, в основном. И я не вижу в этом ничего необычного.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643049</guid>
        <pubDate>Sat, 19 Dec 2015 21:47:17 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643049</link>
        <description><![CDATA[Oleg2004: В голову приходит только вычисление суммы ряда или поиск максимально-минимального в массиве... :) на худой конец транспонирование матрицы. :(]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643046</guid>
        <pubDate>Sat, 19 Dec 2015 21:41:07 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643046</link>
        <description><![CDATA[D_KEY: Так давайте какую-нибудь задачку придумаем :-?]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643039</guid>
        <pubDate>Sat, 19 Dec 2015 20:53:49 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643039</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643034'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T20:22:23+00:00">19.12.15, 20:22</time></span><div class='quote '>Я попробую(ocaml, haskell), но не уверен, что мой код будет аутентичен. </div></div><br>
Код предназначен для реализации некоего алгоритма - т.е. цепочки действий, исполнение которых в указанном порядке приведет к желаемому результату.<br>
Поэтому для любого кода первична постановка задачи - и описание предполагаемого решения ее с помощью этого кода.<br>
Так что начните с идеи - please :)]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643034</guid>
        <pubDate>Sat, 19 Dec 2015 20:22:23 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643034</link>
        <description><![CDATA[D_KEY: Ну <strong class='tag-b'>korvin</strong>, думаю, сможет что-нибудь продемонстрировать. Я попробую(ocaml, haskell), но не уверен, что мой код будет аутентичен.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643031</guid>
        <pubDate>Sat, 19 Dec 2015 20:20:01 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643031</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3643023'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T19:41:57+00:00">19.12.15, 19:41</time></span><div class='quote '>Давайте уже задачки решать, что попусту разговоры разговаривать?</div></div><br>
Функциональщиков бы заманить малеха ...  :lol:]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643023</guid>
        <pubDate>Sat, 19 Dec 2015 19:41:57 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643023</link>
        <description><![CDATA[D_KEY: Давайте уже задачки решать, что попусту разговоры разговаривать? :) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-12-19T19:55:57+00:00">19.12.15, 19:55</time></span></span><br>
А то на словах все такие уверенные... :D]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643016</guid>
        <pubDate>Sat, 19 Dec 2015 18:54:39 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3643016</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3642932'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>shm &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T11:54:29+00:00">19.12.15, 11:54</time></span><div class='quote '>Не, ну чисто теоретически можно придать экзотическую архитектуру, для которой функциональные языки будут &quot;ближе&quot;. </div></div><br>
Истории известны такие специфические архитектуры машин, например ЛИСП-машина, Пролог-машина. Тупиковая ветвь архитектуры, как например PASDEC - японская машина, для которой Паскаль был родным машинным языком.]]></description>
        <author>Oleg2004</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3642982</guid>
        <pubDate>Sat, 19 Dec 2015 15:22:29 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3642982</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3642975'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>shm &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T14:28:57+00:00">19.12.15, 14:28</time></span><div class='quote '>JoeUser, я о архитектуре вычислительной машины. </div></div><br>
Без разницы. На низкоуровневом ЯП можно сделать все тоже самое (т.е. не хуже), что и на высокоуровневом. А можно и лучше. На любой архитектуре.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3642975</guid>
        <pubDate>Sat, 19 Dec 2015 14:28:57 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3642975</link>
        <description><![CDATA[shm: <strong class='tag-b'>JoeUser</strong>, я о архитектуре вычислительной машины.]]></description>
        <author>shm</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3642948</guid>
        <pubDate>Sat, 19 Dec 2015 13:27:33 +0000</pubDate>
        <title>Erlang vs Haskel</title>
        <link>https://forum.sources.ru/index.php?showtopic=407414&amp;view=findpost&amp;p=3642948</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407414&view=findpost&p=3642932'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>shm &#064; <time class="tag-quote__quoted-time" datetime="2015-12-19T11:54:29+00:00">19.12.15, 11:54</time></span><div class='quote '>функциональные языки будут &quot;ближе&quot;</div></div><br>
Ну так фишка в том, что &quot;ближе&quot; - это удобство программирования, а не возможности. Если бы шла речь о количестве функционала в единицу времени - тогда да, чем выше уровень ЯП, тем быстрее разработка. Но речь же шла о производительности кода. Абсурд.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      </channel>
      </rss>
	