<?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=413629&amp;view=findpost&amp;p=3784176</guid>
        <pubDate>Fri, 30 Nov 2018 01:35:39 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3784176</link>
        <description><![CDATA[Serafim: А что мучаться-то. Ответ и так очевиден.]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3784010</guid>
        <pubDate>Thu, 29 Nov 2018 06:41:30 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3784010</link>
        <description><![CDATA[Cfon: Ясно, вопрос снят&#33; Не скажу ответ мучайтесь :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783971</guid>
        <pubDate>Wed, 28 Nov 2018 14:40:11 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783971</link>
        <description><![CDATA[nash: я тоже думаю, VBScript. ну а что еще.]]></description>
        <author>nash</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783957</guid>
        <pubDate>Wed, 28 Nov 2018 12:08:58 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783957</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3783892'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-11-28T05:02:47+00:00">28.11.18, 05:02</time></span><div class='quote '>8ой язык в списке Форбс</div></div><br>
Хм ... там только VBScript&#33;  :-?]]></description>
        <author>JoeUser</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783917</guid>
        <pubDate>Wed, 28 Nov 2018 09:50:15 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783917</link>
        <description><![CDATA[K313: 中文]]></description>
        <author>K313</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783894</guid>
        <pubDate>Wed, 28 Nov 2018 06:39:03 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783894</link>
        <description><![CDATA[Астарот: VBScript же&#33;]]></description>
        <author>Астарот</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783892</guid>
        <pubDate>Wed, 28 Nov 2018 05:02:47 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783892</link>
        <description><![CDATA[Cfon: очередная подсказка  :D <br>8ой язык в списке Форбс  :lool:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783888</guid>
        <pubDate>Wed, 28 Nov 2018 01:07:51 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783888</link>
        <description><![CDATA[Serafim: Хм... Я думаю это всё же VBScript]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783826</guid>
        <pubDate>Tue, 27 Nov 2018 05:23:34 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783826</link>
        <description><![CDATA[Cfon: Прид*рок не балуйся&#33; :lool:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783789</guid>
        <pubDate>Mon, 26 Nov 2018 11:26:20 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783789</link>
        <description><![CDATA[nash: VBScript?]]></description>
        <author>nash</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783786</guid>
        <pubDate>Mon, 26 Nov 2018 09:23:36 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783786</link>
        <description><![CDATA[Cfon: Ок даю подсказки  :D <ul class="tag-list"><li>C</li><li>Go</li><li>Swift</li><li>Rust</li><li>Python</li><li>Java</li><li>Scala</li><li>Kotlin</li><li>C#</li></ul>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783722</guid>
        <pubDate>Sun, 25 Nov 2018 05:19:36 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783722</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3783701'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>nash &#064; <time class="tag-quote__quoted-time" datetime="2018-11-24T15:44:15+00:00">24.11.18, 15:44</time></span><div class='quote '>VBScript?</div></div><br>
:bad: <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="2018-11-25T05:20:44+00:00">25.11.18, 05:20</time></span></span><br>
Ещё идеи?  :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783701</guid>
        <pubDate>Sat, 24 Nov 2018 15:44:15 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783701</link>
        <description><![CDATA[nash: VBScript?]]></description>
        <author>nash</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783607</guid>
        <pubDate>Fri, 23 Nov 2018 12:47:35 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3783607</link>
        <description><![CDATA[Cfon: Хаскель изучил :D <br>догадайтесь че я щас изучаю?  :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782327</guid>
        <pubDate>Thu, 08 Nov 2018 19:16:07 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782327</link>
        <description><![CDATA[Cfon: Надеюсь теперь с компилятором GHC все порядке  :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782187</guid>
        <pubDate>Tue, 06 Nov 2018 08:33:27 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782187</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781800'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-10-29T19:38:58+00:00">29.10.18, 19:38</time></span><div class='quote '>Он медленный, жрёт кучу оперативы и не читаемый. </div></div><br>
Зато в свое время в нем были эпичные баги: <a class='tag-url' href='https://twitter.com/bos31337/status/116372971509121025' target='_blank'>https://twitter.com/bos31337/status/116372971509121025</a> :D]]></description>
        <author>Астарот</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782144</guid>
        <pubDate>Mon, 05 Nov 2018 09:02:40 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782144</link>
        <description><![CDATA[Cfon: ОК а вот и императивный words  :D <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp;const result = [];</div><div class="code_line">&nbsp;&nbsp;let word = &#39;&#39;, cc;</div><div class="code_line">&nbsp;&nbsp;let i = 0, &nbsp;len = s.length;</div><div class="code_line">&nbsp;&nbsp;while (i &#60; len) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cc = s[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!p(c)) word += cc; </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (p(c) &amp;&amp; word !== &#39;&#39;) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;result.push(word);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;word = &#39;&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (i === len - 1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;result.push(word); </div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
ПС.  писал на дровнях сильно не пинайте, это чисто императивный стиль :D<br>
Вспомнил старый добрый Си  :whistle:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782124</guid>
        <pubDate>Sun, 04 Nov 2018 10:43:14 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782124</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>K313 &#064; <time class="tag-quote__quoted-time" datetime="2018-11-02T17:19:58+00:00">02.11.18, 17:19</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781965'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-10-31T11:21:45+00:00">31.10.18, 11:21</time></span><div class='quote '> Я не стал юзать кастомную функцию compose и править ручками words, а заюзал библу Ramda </div></div>а ты сам то чё? целую либу заюзал?</div></div><br>
Ramda.compose не относиться к решению нашей задаче, ее можно не юзать. <br>
Вот без compose<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">const wordNums = s =&#62; group( qsort( words(c =&#62; c === &#39; &#39;, s))).map(ws =&#62; [ws.length, ws[0]]);</div></ol></div></div></div></div><br>
<br>
<br>
А вот вам императивный вариант wordNums, писал на дровнях  :D  <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">function wordNums(s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;const ws = words(c =&#62; c === &#39; &#39;, s);</div><div class="code_line">&nbsp;&nbsp; &nbsp;const result = [];</div><div class="code_line">&nbsp;&nbsp; &nbsp;const o = {};</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (const w of ws) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;o[w] = o[w] ? o[w] + 1 : 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (const w in o) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;result.push([o[w], w]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return result;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Все приходится делать самому&#33; :D<br>
<br>
ПС. надо ишо words на императивные рельсы поставить :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782087</guid>
        <pubDate>Fri, 02 Nov 2018 17:19:58 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782087</link>
        <description><![CDATA[K313: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781965'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-10-31T11:21:45+00:00">31.10.18, 11:21</time></span><div class='quote '> Я не стал юзать кастомную функцию compose и править ручками words, а заюзал библу Ramda </div></div>а ты сам то чё? целую либу заюзал?]]></description>
        <author>K313</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782085</guid>
        <pubDate>Fri, 02 Nov 2018 14:16:22 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782085</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782079'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>K313 &#064; <time class="tag-quote__quoted-time" datetime="2018-11-02T10:58:02+00:00">02.11.18, 10:58</time></span><div class='quote '>я фапще не в теме, поэтому буду ляпать для начала, что не попада <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">array_count_values( preg_split( &#39;/\s+/&#39;, $string ) );</div></ol></div></div></div></div></div></div><br>
да попада  :D но тока ты юзаешь готовые функции, а надо ручками :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782079</guid>
        <pubDate>Fri, 02 Nov 2018 10:58:02 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782079</link>
        <description><![CDATA[K313: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-11-02T07:57:44+00:00">02.11.18, 07:57</time></span><div class='quote '>Что ты понимаешь под корутинами?</div></div><br>
что тут опять начинается?&#33;&#33; было же всё тихо и спокойно... Сифон сам себе байки рассказывал, никого не трогал... и тут вдруг какой-то коротин  :oops: <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="2018-11-02T11:02:50+00:00">02.11.18, 11:02</time></span></span><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">array_count_values( preg_split( &#39;/\s+/&#39;, $string ) );</div></ol></div></div></div></div>]]></description>
        <author>K313</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782073</guid>
        <pubDate>Fri, 02 Nov 2018 07:57:44 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782073</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782066'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-11-02T05:06:44+00:00">02.11.18, 05:06</time></span><div class='quote '><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">foreach ($words as $word) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;yield \substr_count($sentence, $word) =&#62; $word;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Итератор, который возвращает в качестве ключа количество слов, а в качестве значения само слово.</div></div><br>
Вывод какой будет тут? Как можно проверить? И у тебя юзаеться готовая фунция substr_count&#33; ты за кого меня держишь?  :D, у меня же все ручками&#33; Ну кроме map :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">const wordNums = s =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp;group( qsort( words(c =&#62; c === &#39; &#39;, s))).map(ws =&#62; [ws.length, ws[0]]);</div></ol></div></div></div></div><br>
Если на входе строка к примеру &quot;hello world hello&quot;, а на выходе массив, в котором каждый элемент представлял два значения, первое - слово, второе - число его повторов или наоборот без разницы :D. Я уже выше приводил :wall: <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">// [ [2, &quot;hello&quot;], [1, &quot;world&quot;] ]</div></ol></div></div></div></div><br>
У тебя так? :D <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782066'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-11-02T05:06:44+00:00">02.11.18, 05:06</time></span><div class='quote '>генераторы - это не корутины. У генераторов в ES6 нет возможностей корутин.</div></div><br>
Что ты понимаешь под корутинами?]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782066</guid>
        <pubDate>Fri, 02 Nov 2018 05:06:44 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782066</link>
        <description><![CDATA[Serafim: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782065'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-11-02T04:26:19+00:00">02.11.18, 04:26</time></span><div class='quote '>Ты пока написал пол того что делает мой код&#33; Напиши всю wordNums так чтобы не жрало память, хоть на пыхе хоть на чем мля но тока напиши&#33;</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">foreach ($words as $word) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;yield \substr_count($sentence, $word) =&#62; $word;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Итератор, который возвращает в качестве ключа количество слов, а в качестве значения само слово.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782065'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-11-02T04:26:19+00:00">02.11.18, 04:26</time></span><div class='quote '>генераторы введенные в ES6 поддерживают их</div></div><br>
генераторы - это не корутины. У генераторов в ES6 нет возможностей корутин.]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782065</guid>
        <pubDate>Fri, 02 Nov 2018 04:26:19 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782065</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782052'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-11-01T21:11:46+00:00">01.11.18, 21:11</time></span><div class='quote '>Да потому что ты хренью страдаешь. Из нормального кода делаешь хрень. Функциональщина нужна там, где она будет профитна, а не везде её пихать. Функции от коллекций в JS работают сразу над всем массивом. Ты его весь держишь в памяти. Это полная дичь. В моём же примере память выделяется ровно в пару-тройку байт. Как только очередное слово находится - память вычищается сразу же. </div></div><br>
В каком примере?&#33; :wall:<br>
Ты пока написал пол того что делает мой код&#33; Напиши всю wordNums так чтобы не жрало память, хоть на пыхе хоть на чем мля но тока напиши&#33; А не язычком моли  :whistle:   <br>
Код на пыхе что делает? Вывод в итоге какой? Мне надо получить из предложения, список пар где будет слово и число его повторений в предолжении, например<br>
 &quot;hello world hello&quot; -&gt; [[2, &quot;hello&quot;], [1, &quot; world&quot;]]<br>
<br>
Да и напиши свой гавнокод как обещал в 10 раз меньше моего гавнокода :D <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="2018-11-02T04:52:30+00:00">02.11.18, 04:52</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782052'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-11-01T21:11:46+00:00">01.11.18, 21:11</time></span><div class='quote '>А т.к. JS дерьмо и в нём нет корутин, то вместо return передаём значение в анонимочку </div></div><br>
почему нет корутин? есть :D <br>
генераторы введенные в ES6 поддерживают их :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782052</guid>
        <pubDate>Thu, 01 Nov 2018 21:11:46 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782052</link>
        <description><![CDATA[Serafim: <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">function wordNums(it) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return it.length;</div><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="2018-11-01T21:12:23+00:00">01.11.18, 21:12</time></span></span><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="2018-11-01T21:15:13+00:00">01.11.18, 21:15</time></span></span><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 sentence.split(/\W+/).length;</div></ol></div></div></div></div><br>
<br>
Т.е. в функции выше (самой первой) сплит по пробелу надо заменить на сплит по регулярке, а затем длину от итератора.<br>
<br>
А т.к. JS дерьмо и в нём нет корутин, то вместо return передаём значение в анонимочку <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="2018-11-01T21:22:24+00:00">01.11.18, 21:22</time></span></span><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">function words(string $sentence): iterable</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;$buffer = &#39;&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;foreach (\str_split($sentence) as $char) { // Итератор по чарам</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (\preg_match(yield $separator, $char)) { // Корутина разделения символов по регулярке с произвольным разделителем</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$buffer = &#39;&#39; &amp;&amp; yield $buffer; // Возвращаем буфер</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;$buffer .= $char; // Конкатенируем с буфером</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">function word_nums(iterable $words): iterable </div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;foreach ($words as $i =&#62; $word) { // Пробегаемся по словам</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;yield $word; // Возвращаем слово</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return $i; // Возвращаем последний индекс</div><div class="code_line">}</div></ol></div></div></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="2018-11-01T21:28:51+00:00">01.11.18, 21:28</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3782040'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-11-01T16:37:56+00:00">01.11.18, 16:37</time></span><div class='quote '>И тишина... походу парнишка сдулся? </div></div><br>
Да потому что ты хренью страдаешь. Из нормального кода делаешь хрень. Функциональщина нужна там, где она будет профитна, а не везде её пихать. Функции от коллекций в JS работают сразу над всем массивом. Ты его весь держишь в памяти. Это полная дичь. В моём же примере память выделяется ровно в пару-тройку байт. Как только очередное слово находится - память вычищается сразу же. <br>
<br>
И опять же приходим к тому, что в JS нет вообще ленивых коллекций: <a class='tag-url' href='https://github.com/ramda/ramda/blob/master/source/map.js#L45' target='_blank'>https://github.com/ramda/ramda/blob/master/source/map.js#L45</a><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">export default *function(cb, iterator) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (let item of iterator) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;yield cb(item);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782040</guid>
        <pubDate>Thu, 01 Nov 2018 16:37:56 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3782040</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781886'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-10-30T19:20:45+00:00">30.10.18, 19:20</time></span><div class='quote '>Код смотрится отвратно. Я могу сократить его в 10 раз и сделать на порядки читаемее...</div></div><br>
И тишина... походу парнишка сдулся?  :-? <br>
Симка балабол&#33; :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781965</guid>
        <pubDate>Wed, 31 Oct 2018 11:21:45 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781965</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781944'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-10-31T10:09:53+00:00">31.10.18, 10:09</time></span><div class='quote '><a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781730' target='_blank'>Изучаю Haskell (сообщение #3781730)</a></div></div><br>
И все?&#33; нет батенька от меня так просто не отделаться :lool: <br>
будьте добры всю функцию wordNums :D<br>
<br>
В прошлом примере я не юзал композицию, в отличие от примера на Хаскелле, давайте заюзим в wordNums композицию и дополнительно для words каррирование. Я не стал юзать кастомную функцию compose и править ручками words, а заюзал библу Ramda <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">const R = require(&#39;ramda&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">const wordNums = s =&#62; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;R.compose(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a =&#62; a.map(ws =&#62; [ws.length, ws[0]]),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;group, </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;qsort, </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;R.curry(words)(c =&#62; c === &#39; &#39;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;)(s);</div><div class="code_line">&nbsp;</div><div class="code_line">.........</div></ol></div></div></div></div><br>
получилось длинее, но так для практики пойдет  :D<br>
<br>
Еще улучшим код, добавим функцию isSpace<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">const wordNums = s =&#62; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;R.compose(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a =&#62; a.map(ws =&#62; [ws.length, ws[0]]),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;group, </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;qsort, </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;R.curry(words)(isSpace)</div><div class="code_line">&nbsp;&nbsp; &nbsp;)(s);</div><div class="code_line">&nbsp;</div><div class="code_line">const isSpace = c =&#62; /[\s\.;,!?-]/.test(c);</div></ol></div></div></div></div><br>
теперь можно изи добавлять символы игнора  :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781944</guid>
        <pubDate>Wed, 31 Oct 2018 10:09:53 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781944</link>
        <description><![CDATA[Serafim: <a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781730' target='_blank'>Изучаю Haskell (сообщение #3781730)</a>]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781910</guid>
        <pubDate>Wed, 31 Oct 2018 05:31:00 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781910</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781886'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-10-30T19:20:45+00:00">30.10.18, 19:20</time></span><div class='quote '>Код смотрится отвратно. Я могу сократить его в 10 раз и сделать на порядки читаемее... Хотя, постой, кажется, я уже это делал :whistle:</div></div><br>
Го жду :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781886</guid>
        <pubDate>Tue, 30 Oct 2018 19:20:45 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781886</link>
        <description><![CDATA[Serafim: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781862'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-10-30T10:52:15+00:00">30.10.18, 10:52</time></span><div class='quote '>Вроде как Haskell рекурсии оптимизирует и они не жрут память, читал где то </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="2018-10-30T19:22:21+00:00">30.10.18, 19:22</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781885'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-10-30T19:01:01+00:00">30.10.18, 19:01</time></span><div class='quote '>Но несмотря на это в обшем код смотрится функционально&#33;</div></div><br>
Код смотрится отвратно. Я могу сократить его в 10 раз и сделать на порядки читаемее... Хотя, постой, кажется, я уже это делал :whistle:]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781885</guid>
        <pubDate>Tue, 30 Oct 2018 19:01:01 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781885</link>
        <description><![CDATA[Cfon: Готова&#33; :D <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (s === &#39;&#39;) return []; </div><div class="code_line">&nbsp;&nbsp; &nbsp;const [w, s1] = split(p, dropWhile(p, [...s])); </div><div class="code_line">&nbsp;&nbsp; &nbsp;return [w.join(&#39;&#39;), ...words(p, s1.join(&#39;&#39;))]; </div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">function group(xs) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (xs.length == 0) return [];</div><div class="code_line">&nbsp;&nbsp; &nbsp;const [x, ...xs1] = xs;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const [ys, zs] = split(x1 =&#62; x1 !== x, xs1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return [[x, ...ys], ...group(zs)];</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">function split(p, xs) { </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (xs.length == 0) return [[],[]];</div><div class="code_line">&nbsp;&nbsp; &nbsp;const [x, ...xs1] = xs;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!p(x)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const [ys, zs] = split(p, xs1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return [[x, ...ys], zs];</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return [[], xs];</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">function dropWhile(p, xs) {...} // см выше</div><div class="code_line">function qsort(xs) {...} // см quicksort </div><div class="code_line">&nbsp;</div><div class="code_line">const wordNums = s =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp;group( qsort( words(c =&#62; c == &#39; &#39;, s))).map(ws =&#62; ([ws.length, ws[0]]));</div><div class="code_line">&nbsp;</div><div class="code_line">const s = &#39;hello world hello&#39;;</div><div class="code_line">console.log(wordNums(s));</div><div class="code_line">// [ [ 2, &#39;hello&#39; ], [ 1, &#39;world&#39; ] ]</div></ol></div></div></div></div><br>
Получилось почти в функциональном стиле, почему почти?  :D <br>
1 - в функциях больше одного return <br>
2 - наличие присваиваний<br>
Все это вносит некий императизм :D<br>
Но несмотря на это в обшем код смотрится функционально&#33; :blush:<br>
Особенно функция wordNums изящно не правда ли? :wizard:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781862</guid>
        <pubDate>Tue, 30 Oct 2018 10:52:15 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781862</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781800'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-10-29T19:38:58+00:00">29.10.18, 19:38</time></span><div class='quote '>Он медленный, жрёт кучу оперативы и не читаемый.</div></div> <br>
Вроде как Haskell рекурсии оптимизирует и они не жрут память, читал где то :) <br>
а не читаемый потому что функциональный стиль требует иного подхода к чтению  :D<br>
<br>
ОК очередное задание, переписать на JS код, который парсит строку на слова и возвращает список из числа повторений каждого слова и самого слова  :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">*Main&#62; wordNums &quot;hello world hello&quot;</div><div class="code_line">[(2,&quot;hello&quot;),(1,&quot;world&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">wordNums :: String -&#62; [(Int, String)]</div><div class="code_line">wordNums s = [(length ws, head ws) | ws &#60;- group . qsort . words (==&#39; &#39;) $ s]</div><div class="code_line">&nbsp;</div><div class="code_line">words :: (Char -&#62; Bool) -&#62; String -&#62; [String]</div><div class="code_line">words p s = case dropWhile p s of</div><div class="code_line">&nbsp;&nbsp;&quot;&quot; -&#62; []</div><div class="code_line">&nbsp;&nbsp;s&#39; -&#62; w : words p s&#39;&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp;where (w, s&#39;&#39;) = split p s&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">qsort :: (Ord a) =&#62; [a] -&#62; [a]</div><div class="code_line">qsort [] = []</div><div class="code_line">qsort (x : xs) =</div><div class="code_line">&nbsp;&nbsp; &nbsp;qsort [y | y &#60;- xs, y &#60;= x] ++</div><div class="code_line">&nbsp;&nbsp; &nbsp;[x] ++</div><div class="code_line">&nbsp;&nbsp; &nbsp;qsort [y | y &#60;- xs, y &#62; x]</div><div class="code_line">&nbsp;</div><div class="code_line">group :: (Eq a) =&#62; [a] -&#62; [[a]]</div><div class="code_line">group [] = []</div><div class="code_line">group (x:xs) = (x:ys): group zs where (ys, zs) = split (/= x) xs</div><div class="code_line">&nbsp;</div><div class="code_line">split :: (a -&#62; Bool) -&#62; [a] -&#62; ([a], [a]) </div><div class="code_line">split p (x:xs) | (not . p) x = (x:ys, zs) where (ys, zs) = split p xs</div><div class="code_line">split _ xs = ([], xs)</div></ol></div></div></div></div><br>
Функции words, qsort уже переписаны на JS в предыдущих постах, я их для наглядности сюда тоже перенес. Осталось group и wordNums. Ну а split я просто вынес из words для повторного применения в group. Она делить список (строку) на две части согласно предику :D<br>
<br>
Пояснения к коду Хаскелл.<br>
words - получает исходную строку и возвращает список слов<br>
group - получает список слов и выделяет рядом лежащие совпадающие слова в отдельные списки, ну возвращает его (список списков)<br>
sort - понятно сортирует :D <br>
split - уже писал выше<br>
ВСЕ&#33; да и я тоже буду переводить го кто шустрее :lool:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781800</guid>
        <pubDate>Mon, 29 Oct 2018 19:38:58 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781800</link>
        <description><![CDATA[Serafim: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781737'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-10-29T05:47:56+00:00">29.10.18, 05:47</time></span><div class='quote '>ну и где тут функциональный подход Хаскелл?</div></div><br>
Он медленный, жрёт кучу оперативы и не читаемый.]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781783</guid>
        <pubDate>Mon, 29 Oct 2018 17:57:38 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781783</link>
        <description><![CDATA[Cfon: Пардон&#33; Грубая ошибка&#33; Так нельзя &gt;:( <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp;if (s === &#39;&#39;) return []; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;const f = (p, s) =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;const [x = &#39; &#39;, ...xs] = s;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return !p(x)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;? ({ys, zs} = f(p, xs), {ys: [x,...ys], zs}) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; // &nbsp;^^^^^ создаются глобальные переменные!! </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;: {ys:[], zs: xs} </div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;const {ys: w, zs: s1} = f(p, dropWhile(p, [...s])); </div><div class="code_line">&nbsp;&nbsp;return [w.join(&#39;&#39;), ...words(p, s1.join(&#39;&#39;))]; </div><div class="code_line">}</div></ol></div></div></div></div><br>
Обратно к корректной форме :D <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (s === &#39;&#39;) return []; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const f = (p, s) =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const [x = &#39; &#39;, ...xs] = s;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!p(x)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const {ys, zs} = f(p, xs); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; ^^^^ &nbsp;OK, локальные переменные</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return {ys: [x,...ys], zs};</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return {ys:[], zs: xs};</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const {ys: w, zs: s1} = f(p, dropWhile(p, [...s])); </div><div class="code_line">&nbsp;&nbsp; &nbsp;return [w.join(&#39;&#39;), ...words(p, s1.join(&#39;&#39;))]; </div><div class="code_line">}</div></ol></div></div></div></div><br>
Фан версия&#33; :D <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (s === &#39;&#39;) return []; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const f = (p, s) =&#62; (() =&#62; { </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const [x = &#39; &#39;, ...xs] = s;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return !p(x)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;? (() =&#62; {const {ys, zs} = f(p, xs);return {ys: [x,...ys], zs}})() </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: {ys:[], zs: xs}</div><div class="code_line">&nbsp;&nbsp; &nbsp;})();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const {ys: w, zs: s1} = f(p, dropWhile(p, [...s])); </div><div class="code_line">&nbsp;&nbsp; &nbsp;return [w.join(&#39;&#39;), ...words(p, s1.join(&#39;&#39;))]; </div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781764</guid>
        <pubDate>Mon, 29 Oct 2018 12:30:45 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781764</link>
        <description><![CDATA[Cfon: Вот еще немного рихтовки  :D <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp;if (s === &#39;&#39;) return []; // 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;const f = (p, s) =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;const [x = &#39; &#39;, ...xs] = s; </div><div class="code_line">&nbsp;&nbsp; &nbsp;return !p(x) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;? ({ys, zs} = f(p, xs), {ys: [x,...ys], zs}) // 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;: {ys:[], zs: xs} // 5</div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;const {ys: w, zs: s1} = f(p, dropWhile(p, [...s])); // 3</div><div class="code_line">&nbsp;&nbsp;return [w.join(&#39;&#39;), ...words(p, s1.join(&#39;&#39;))]; // 2</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">words :: (Char -&#62; Bool) -&#62; String -&#62; [String]</div><div class="code_line">words _ [] = [] // 1</div><div class="code_line">words p s = w : words p s&#39; // 2</div><div class="code_line">&nbsp;&nbsp; &nbsp;where</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(w, s&#39;) = f p $ dropWhile p s // 3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; f p (x:xs) | (not . p) x = (x:ys, zs) where (ys, zs) = f p xs // 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; f _ xs = ([], xs) // 5</div></ol></div></div></div></div><br>
Почти один в один  :D<br>
<br>
В ходе исследования кода JS в попытке приблизить его в функциональному стилю Haskell должен отметить операторы запятая и тернарный, а также синтаксис деструктуризации объектов и массивов, и остаточных элементов ES6  :thanks: Без них мало что получилось&#33;  :D<br>
А также группе Helloween и ушам Audio Technica&#33; Они хорошо изолировали меня от окружающих&#33;  :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781737</guid>
        <pubDate>Mon, 29 Oct 2018 05:47:56 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781737</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-10-28T17:26:12+00:00">28.10.18, 17:26</time></span><div class='quote '>Баг нашел, дело в строчке где происходит отделение символа от строки, но пока решения не нашел, временно поставил императивный костыль :D <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (s === &#39;&#39;) return [];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function f(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const [c = &#39; &#39;, ...s1] = s; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp; &nbsp;^^ значение по умолчанию</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!p(c)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const {w, s2} = f(p, s1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return {w: [c, ...w], s2};</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return {w:[], s2: s1};</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const {w, s2} = f(p, dropWhile(p, [...s]));</div><div class="code_line">&nbsp;&nbsp; &nbsp;return [w.join(&#39;&#39;), ...words(p, s2.join(&#39;&#39;))];</div><div class="code_line">}</div></ol></div></div></div></div><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="2018-10-29T05:56:25+00:00">29.10.18, 05:56</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781730'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-10-28T22:43:25+00:00">28.10.18, 22:43</time></span><div class='quote '><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">function *words(sentence, separator) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;let buffer = &#39;&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (let char of sentence) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (char === separator) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;yield buffer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;buffer = &#39;&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;buffer += char;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
ну и где тут функциональный подход Хаскелл?  :blink: <br>
<br>
очередная императивная реализация :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781730</guid>
        <pubDate>Sun, 28 Oct 2018 22:43:25 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781730</link>
        <description><![CDATA[Serafim: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781692'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2018-10-28T06:57:02+00:00">28.10.18, 06:57</time></span><div class='quote '>нет надо показать реализацию JS кода что привел на Haskell  </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">function *words(sentence, separator) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;let buffer = &#39;&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (let char of sentence) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (char === separator) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;yield buffer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;buffer = &#39;&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;buffer += char;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<span class="b-attach" data-size="283848" data-hits="403" data-attach-id="59403" data-attach-post-id="3781730">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3781730&amp;attach_id=59403' title='Скачать файл' target='_blank'>123123.jpg</a> (, : 403)
		</span>]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781720</guid>
        <pubDate>Sun, 28 Oct 2018 17:26:12 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781720</link>
        <description><![CDATA[Cfon: Баг нашел, дело в строчке где происходит отделение символа от строки, но пока решения не нашел, временно поставил императивный костыль :D <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (s === &#39;&#39;) return [];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function f(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let [c, ...s1] = s; //&#60;--- тут баг</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (c === undefined) c = &#39; &#39;; //&#60;-- костыль</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!p(c)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const {w, s2} = f(p, s1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return {w: [c, ...w], s2};</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return {w:[], s2: s1};</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const {w, s2} = f(p, dropWhile(p, [...s]));</div><div class="code_line">&nbsp;&nbsp; &nbsp;return [w.join(&#39;&#39;), ...words(p, s2.join(&#39;&#39;))];</div><div class="code_line">}</div></ol></div></div></div></div><br>
Попутно подрихтовал код заюзав деструктиризацию массива вместо прямых манипуляций :D <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">const a = [...s];</div><div class="code_line">const {c, s1} = { c: a.shift(), s1: a.join(&#39;&#39;)};</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">let [c, ...s1] = s;</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781702</guid>
        <pubDate>Sun, 28 Oct 2018 12:40:02 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781702</link>
        <description><![CDATA[Cfon: Приветствую вот накодил получилась жесть, как по мне что то не то :D  <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">function words(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (s === &#39;&#39;) return [];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function f(p, s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const a = [...s];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const {c, s1} = { c: a.shift(), s1: a.join(&#39;&#39;)};</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!p(c)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const {w, s2} = f(p, s1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return {w: [c,...w].join(&#39;&#39;), s2};</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return {w:[], s2:s1};</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const {w, s2} = f(p, dropWhile(p, [...s]).join(&#39;&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp;return [w, ...words(p, s2)];</div><div class="code_line">} </div><div class="code_line">&nbsp;</div><div class="code_line">const s = &quot;Lorem Ipsum is simply dummy text of the printing and typesetting industry. &quot;;</div><div class="code_line">const ws = words(c =&#62; c === &#39; &#39;, s);</div><div class="code_line">console.log(ws);</div><div class="code_line">// [&quot;Lorem&quot;,&quot;Ipsum&quot;,&quot;is&quot;,&quot;simply&quot;,&quot;dummy&quot;,&quot;text&quot;,&quot;of&quot;,&quot;the&quot;,&quot;printing&quot;,&quot;and&quot;,&quot;typesetting&quot;,&quot;industry.&quot;]</div></ol></div></div></div></div><br>
в коде есть где то баг, если исходная строка не заканчивается пробелом, то все летит лесом :D <br>
ПС. dropWhile взят из прошлых моих творений что в предыдущих постах постах :D <br>
ладно чет устал я если у вас есть желание найти баг, ну или свой пример запостить велком, а я отдыхать&#33; :huh:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781692</guid>
        <pubDate>Sun, 28 Oct 2018 06:57:02 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781692</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413629&view=findpost&p=3781684'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Serafim &#064; <time class="tag-quote__quoted-time" datetime="2018-10-28T00:27:26+00:00">28.10.18, 00:27</time></span><div class='quote '><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">&#39;Lorem Ipsum is simply dummy text of the printing and typesetting industry.&#39;.split(&#39; &#39;)</div></ol></div></div></div></div></div></div><br>
нет надо показать реализацию JS кода что привел на Haskell  :D <br>
То что в JS есть свои функции для обработки строк, я естесно в курсе как бы не наслышке, мой здесь интерес реализовать их в функциональном стиле.<br>
Кстати в Хаскелле уже есть готовая функция words, я ее тут немного переклепал для практики  :D<br>
<br>
Догадываюсь что тут мало Хаскелистов (, а может и нет вапще  :D ) и приведеный мной код не понятен многим, поэтому я ща его расшифрую  :D<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">words _ [] = [] // 1</div><div class="code_line">words p s = w : words p s&#39; // 2</div><div class="code_line">&nbsp;&nbsp; &nbsp; where </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (w, s&#39;) = f p $ dropWhile p s // 3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; f p (x:xs) | (not . p) x = (x:ys, zs) where (ys, zs) = f p xs // 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; f _ xs = ([], xs) // 5</div></ol></div></div></div></div><br>
Немного поясню стиль написания функций на Хаскелл основан на совпадении образцов (patterns matching), т.е. пишутся простые выражения (уравнения), которые потом выборочно вычисляются в зависимости от совпадения. <br>
1 - совпадение срабатывает в случае когда words вызывается на пустом списке, он же является завершающим вызовом рекурсного вызова words<br>
2 - идет рекурсивный вызов words<br>
3 - вспомогательная функция f собственно выполняет всю работу по разделению слов, вызов dropWhile p s откидывает пробелы вначале строки s и предает ее в функцию f<br>
4 - идет рекурсивный вызов f в результате каждого шага рекурсии возвращется пара или говоря в терминах Хаскелля кортеж (ys, zs), далее он намного изменяется, точнее сам то кортеж не меняется, т.к. в Хаскелл нет переменных в классическом понимании, это просто некое имя для значения или выражения, создается новый кортеж (x:ys, zs) с измененым списком ys, если говорить точнее к нему в голову добавляется значение переменной x<br>
5 - завершающий вызов рекурсии <br>
еще проще сложно описать т.к. надо весь язык капать :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781684</guid>
        <pubDate>Sun, 28 Oct 2018 00:27:26 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781684</link>
        <description><![CDATA[Serafim: <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">&#39;Lorem Ipsum is simply dummy text of the printing and typesetting industry.&#39;.split(&#39; &#39;)</div></ol></div></div></div></div>]]></description>
        <author>Serafim</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781641</guid>
        <pubDate>Sat, 27 Oct 2018 12:23:13 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781641</link>
        <description><![CDATA[Cfon: Очередная шифрограмма от Хаскелл  :D <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">words _ [] = []</div><div class="code_line">words p s = w : words p s&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp;where </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(w, s&#39;) = f p $ dropWhile p s </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;f p (x:xs) | (not . p) x = (x:ys, zs) where (ys, zs) = f p xs</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;f _ xs = ([], xs)</div></ol></div></div></div></div><br>
Что она делает? Получает предикат сравнения, строку, и возвращает список слов.. все  :blink: так коротко? я кайфую :hang:<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">words (==&#39; &#39;) &quot;Lorem Ipsum is simply dummy text of the printing and typesetting industry.&quot;</div><div class="code_line">// [&quot;Lorem&quot;,&quot;Ipsum&quot;,&quot;is&quot;,&quot;simply&quot;,&quot;dummy&quot;,&quot;text&quot;,&quot;of&quot;,&quot;the&quot;,&quot;printing&quot;,&quot;and&quot;,&quot;typesetting&quot;,&quot;industry.&quot;]</div></ol></div></div></div></div><br>
Задача та же перевести на JS :wacko:<br>
<br>
Кстати в Хаскелле отступы имееют значение&#33; Тут аля как их не расставишь, но у меня с этим не было проблем ибо я всегда нормально их ставил :D <br>
но вот те кто не любит отступы будут в га*не  :lool:<br>
Вроде в Пайтоне также. Наверно кодеры Хаскелла и Пайтон дружат :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781567</guid>
        <pubDate>Fri, 26 Oct 2018 07:24:44 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781567</link>
        <description><![CDATA[Cfon: Решил по аналогии с drop&#33; :D <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">const dropWhile = (p, xs) =&#62; (</div><div class="code_line">&nbsp;&nbsp; &nbsp;xs.reduce(({xs, b}, x) =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(b &amp;&amp; p(x)) ? {xs, b:true} : {xs:[...xs, x], b:false}, </div><div class="code_line">&nbsp;&nbsp; &nbsp;{xs:[], b:true}).xs</div><div class="code_line">);</div><div class="code_line">&nbsp;</div><div class="code_line">dropWhile(x =&#62; x &#62; 3, [4,1,2,3,4,5] // [1,2,3,4,5]</div></ol></div></div></div></div><br>
немного были затыки с анонимной функцией, а так изи :D<br>
<br>
Переменную b в JS можно не передавать в акумуляторном объекте, его можно мутировать в замыкании, тут я просто перенес один в один решение в Хаскелл-стиле где нельзя менять значения переменных :blush:<br>
<br>
Например вот как будет в императивном стиле JS  <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">const dropWhile = (p, xs) =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;var b = true; //исходное состояние </div><div class="code_line">&nbsp;&nbsp; &nbsp;return xs.reduce((xs, x) =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(b &amp;&amp; p(x)) ? xs : (b = false, [...xs, x]), </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &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>
как видите код в немного сократился, за счет выкидывания b из аккумуляторного объекта и замены его простым массивом.<br>
<br>
Первые впечатления от Хаскелла в основном положительные  :good:<br>
Функциональный стиль, строгая типизация и т.д все классно,<br>
но если сравнивать с моим кодингом на JS, на Хаскелл сложнее отлаживать хотя он и строго типизирован, но вот мессажи об ошибках, которые возникаю при компиляции, вгоняют меня в ступор, например<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">hof.hs:81:15: error:</div><div class="code_line">&nbsp;&nbsp; &nbsp;* Couldn&#39;t match expected type `[a1]&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with actual type `([a1], Bool)&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp;* In the first argument of `(++)&#39;, namely `xs&#39;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;In the expression: xs ++ [x]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;In the expression: (xs ++ [x], False)</div><div class="code_line">&nbsp;&nbsp; &nbsp;* Relevant bindings include</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;x :: a1 (bound at hof.hs:81:10)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xs :: ([a1], Bool) (bound at hof.hs:81:7)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;f :: ([a1], Bool) -&#62; a1 -&#62; ([a1], Bool) (bound at hof.hs:80:5)</div></ol></div></div></div></div><br>
 :wacko:<br>
<br>
да на JS было много ошибок в рантайме, но хз я их изи правил и находил, чего не скажу пока про Хаскелл  :wall:  <br>
думаю если научусь их читать, то ваще будет шоколадно  :D<br>
<br>
Рекомендую ли я Haskell к изучению новичкам в программировании? Скорее нет, чем да :D<br>
а вот тем кто уже мастер императивном программинге, то велком в Хаскелл найдете много интересного&#33; И мозоль в мозге первое время будет большая  :D<br>
Эт я еще монады не трогал и не прогал GUI, БД и тп, знающие прогеры ну те кто круче меня :D пугают меня ими  :lool:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781537</guid>
        <pubDate>Thu, 25 Oct 2018 17:54:52 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781537</link>
        <description><![CDATA[Cfon: Продолжаем, на очереди dropWhile, его суть отсечение элементов списка по условию. Пока условие истина элементы выкидываются, как только условие ложно все остальные элементы включаются в список:<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">dropWhile p xs = fst $ foldl f z xs</div><div class="code_line">&nbsp;&nbsp;where</div><div class="code_line">&nbsp;&nbsp; &nbsp;f (xs, b) x | b &amp;&amp; p x = (xs, True)</div><div class="code_line">&nbsp;&nbsp; &nbsp;f (xs, _) x = (xs ++ [x], False)</div><div class="code_line">&nbsp;&nbsp; &nbsp;z = ([], True)</div><div class="code_line">&nbsp;</div><div class="code_line">dropWhile (&#62;3) [4,1,2,3,4,5] // [1,2,3,4,5]</div></ol></div></div></div></div><br>
p - предикат, xs - список<br>
Надо преложить на JS. Думаем&#33; :hang:<br>
Хотя пока думаю один я :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781440</guid>
        <pubDate>Wed, 24 Oct 2018 18:32:27 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781440</link>
        <description><![CDATA[Cfon: Готово&#33; Максимально приближенный Хаскель-стиль :blush: <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">const drop = (n, xs) =&#62; (</div><div class="code_line">&nbsp;&nbsp; &nbsp;xs.reduceRight(({xs, m}, x) =&#62; (</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(m &#62; 0) ? (xs.unshift(x), {xs, m: m-1}) : {xs, m:0}</div><div class="code_line">&nbsp;&nbsp; &nbsp;), {xs:[], m: xs.length - n}).xs</div><div class="code_line">);</div></ol></div></div></div></div><br>
Нравится мне эта шифрограмма&#33; :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781362</guid>
        <pubDate>Wed, 24 Oct 2018 05:25:34 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781362</link>
        <description><![CDATA[Cfon: Реализация drop через свертку исходного списка <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">drop n xs = fst $ foldr f z xs</div><div class="code_line">&nbsp;&nbsp;where </div><div class="code_line">&nbsp;&nbsp; &nbsp;f x (xs, m) | m &#62; 0 = (x:xs, m-1) </div><div class="code_line">&nbsp;&nbsp; &nbsp;f _ (xs, _) = (xs,0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;z = ([], m)</div><div class="code_line">&nbsp;&nbsp; &nbsp;m = length xs - n</div></ol></div></div></div></div><br>
получилось длиннее, но более понятно :D <br>
<br>
теперь надо перевести на JS  :blink: <br>
<br>
OK. будем думать.<br>
<br>
ПС. в последнее время я стал адептом краткой нотации :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781319</guid>
        <pubDate>Tue, 23 Oct 2018 07:38:08 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781319</link>
        <description><![CDATA[Cfon: .... иииии&#33; родил зверюшку&#33;  :lool: <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">function drop(n, array) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;const v = [...Array(n)].map((_,n) =&#62; n + 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return v.reduce(xs =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xs.shift();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return xs;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}, [...array]);</div><div class="code_line">}</div></ol></div></div></div></div><br>
Объясняю что тут происходит. Я не сразу допедрил как можно это решить без мутации n&#33; :wall: <br>
Сила императивного стиля моск реально морозит  :D но после долгих насилований себя я прозрел&#33;  :jokingly:   <br>
<br>
если внимательно посмотреть на код Хаскелля видно что он просто производит свертку по числовому списку, а не по целевому списку&#33; Вот где фокус то был&#33; :blink: <br>
Ну а дальше дело техники, генерирую массив чисел от 1 до n поскольку в JS нет встроенного генератора массива как в Хаскелле и далее делаю свертку хотя это на самом деле не свертка, а простая мутация исходного массива путем выкидывания лишних элементов :D<br>
Все тоже можно было сделать тупо в цикле, но мне хотелось приблизить код к Хаскел-стилю, ну те. к функциональному стилю  :blush:<br>
<br>
Немного видоизменил код чтобы максимально приблизится к 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">const genN = n =&#62; [...Array(n).map((_, n) =&#62; n + 1)];</div><div class="code_line">const drop = (n, xs) =&#62; genN(n).reduce(xs =&#62; (xs.shift(), xs), [...xs]);</div></ol></div></div></div></div><br>
Вроде бы уже похоже на функциональный стиль :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781232</guid>
        <pubDate>Mon, 22 Oct 2018 10:32:08 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781232</link>
        <description><![CDATA[Cfon: Так так так... ща рожу...  а не показалось  :lool:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781208</guid>
        <pubDate>Mon, 22 Oct 2018 08:00:32 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781208</link>
        <description><![CDATA[Cfon: :lool: ВСЕ ПРОСТО&#33;&#33; я забыл что в JS можно изменять состояние, это ж не Хаскель :facepalm: <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">function drop(n, array) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (n === 0) return array;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (array.length == 0) return [];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return array.reduce((accum, elem) =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(n-- &#62; 0) ? accum : [...accum, elem], //&#60;--- ВОТ ТУТ ИЗМЕНЯЕМ n. </div><div class="code_line">&nbsp;&nbsp; &nbsp;[]);</div><div class="code_line">}</div></ol></div></div></div></div><br>
или через filter еще проще :D <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">function drop(n, array) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (n === 0) return array;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (array.length == 0) return [];</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return array.filter(() =&#62; (n-- &#60;= 0)); </div><div class="code_line">}</div></ol></div></div></div></div><br>
да и начальные условия тут тоже можно опустить  :D <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">function drop(n, array) { &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;return array.filter(() =&#62; (n-- &#60;= 0)); </div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Хотя я погорячился сказав что проще Хаскеля не проще&#33; куда ж еще проще? :blink: <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">drop n xs = foldl (\(_:xs) _ -&#62; xs) xs [1..n]</div></ol></div></div></div></div><br>
<br>
Да в JS уже есть функция удаления splice, но моя цель перевести с Haskell на JS в функциональном стиле, хотя в предыдущих вариантах был применен полу императивный стиль, а не фунциональный и решение в Haskell стиле требует еще покумекать  :scratch: <br>
ну т.е. сделать без мутации переменной n.]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781150</guid>
        <pubDate>Sun, 21 Oct 2018 12:14:54 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781150</link>
        <description><![CDATA[Cfon: Продолжаю переносить задачки из Хаскель на JS  :D <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">drop 0 xs = xs</div><div class="code_line">drop _ [] = []</div><div class="code_line">drop n (x:xs) = drop (n-1) xs</div></ol></div></div></div></div> <br>
а вот та же но через foldl (это аналог reduce в JS)<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">drop 0 xs = xs</div><div class="code_line">drop _ [] = []</div><div class="code_line">drop n xs = foldl (\xs _ -&#62; tail xs) xs [1..n]</div></ol></div></div></div></div><br>
С рекурсией на JS не было проблем <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">function drop(n, array) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (n === 0) return array;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (array.length == 0) return [];</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;array.shift();</div><div class="code_line">&nbsp;&nbsp; &nbsp;return drop(n-1, array);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">drop(1, [1,2,3]) // [2,3]</div></ol></div></div></div></div><br>
а вот как сделать тоже но через reduce?  :wacko:<br>
<br>
Небольшая поправочка в Хаскелле все данные иммутабельны, а у меня тут исходный массив array меняется, что не в Хаскел-стиле&#33; Правим:<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">function drop(n, array) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;const origin = [...array];</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (n === 0) return origin;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (array.length == 0) return [];</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;origin.shift();</div><div class="code_line">&nbsp;&nbsp; &nbsp;return drop(n-1, origin);</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781015</guid>
        <pubDate>Fri, 19 Oct 2018 12:16:22 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3781015</link>
        <description><![CDATA[Cfon: Для евангелистов reduce коим являюсь сам :D, вот более оптимизированая версия за счет одного цикла, вместо двух в случае с filter: <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">function quicksort(array) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (array.length === 0) return [];</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const origin = [...array];</div><div class="code_line">&nbsp;&nbsp; &nbsp;const elem0 = origin.pop();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;var res = origin.reduce((aa, elem) =&#62; (</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(elem &#60; elem0) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;? [[...aa[0], elem], aa[1]]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: [aa[0], [...aa[1], elem]]</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 [...quicksort(res[0]), elem0, ...quicksort(res[1])];</div><div class="code_line">}</div></ol></div></div></div></div><br>
Цикла? :facepalm: <br>
Да-да не удивляйтесь&#33; В JS все равно надо переключаться в императивный режим :jokingly:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780999</guid>
        <pubDate>Fri, 19 Oct 2018 04:50:39 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780999</link>
        <description><![CDATA[Cfon: Вот вам функционально-подобная попытка на JS приблизится к великому Хаскеллу :D <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">function quicksort(array) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (array.length === 0) return [];</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;const origin = [...array];</div><div class="code_line">&nbsp;&nbsp; &nbsp;const elem0 = origin.pop();</div><div class="code_line">&nbsp;&nbsp; &nbsp;const left = origin.filter(elem =&#62; elem &#60; elem0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;const right = origin.filter(elem =&#62; elem &#62;= elem0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return [...quicksort(left), elem0, ...quicksort(right)];</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">var nums = [10,2,5,3,1,6,7,4,2,3,4,8,9];</div><div class="code_line">var sortedNums = quicksort(nums);</div><div class="code_line">console.log(nuts); &nbsp; &nbsp; &nbsp; // [ 10, 2, 5, 3, 1, 6, 7, 4, 2, 3, 4, 8, 9 ]</div><div class="code_line">console.log(sortedNums); // [ 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 9, 10 ]</div></ol></div></div></div></div><br>
<br>
И все равно императивный стиль JS присутствует :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780868</guid>
        <pubDate>Wed, 17 Oct 2018 12:38:37 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780868</link>
        <description><![CDATA[Cfon: Разобрался зачем :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">const result = [[1,2,3,4,5],[6,7,8,9,10]].map(triples(aa)(bb));</div><div class="code_line">console.log(result);</div><div class="code_line">// [[[ 3, 4, 5 ]], [[ 6, 8, 10 ]]]</div></ol></div></div></div></div><br>
<br>
ну а на Haskell все проще  :D <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">map (triples aa bb) [[1..5],[6..10]]</div><div class="code_line">// [[(3,4,5)],[(6,8,10)]]</div></ol></div></div></div></div><br>
<br>
Кто не понял объясняю, каррированная функция передается функции высшего порядка путем частичного применения  :blush: <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="2018-10-17T12:59:57+00:00">17.10.18, 12:59</time></span></span><br>
Очередной вопрос, вот на 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">quicksort [] = []</div><div class="code_line">quicksort (x : xs) = </div><div class="code_line">&nbsp;&nbsp; &nbsp;quicksort [a | a &#60;- xs, a &#60;= x] ++ </div><div class="code_line">&nbsp;&nbsp; &nbsp;[x] ++ </div><div class="code_line">&nbsp;&nbsp; &nbsp;quicksort [a | a &#60;- xs, a &#62; x]</div></ol></div></div></div></div><br>
<br>
как его переделать на JS  :wacko:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780640</guid>
        <pubDate>Fri, 12 Oct 2018 11:23:13 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780640</link>
        <description><![CDATA[Cfon: Одно замечание по коду, в Хаскеле все функции автоматически каррируются  :D<br>
на JS это будет выглядеть так <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">// Каррированная версия triples</div><div class="code_line">function triples(aa) {</div><div class="code_line">&nbsp;&nbsp;return bb =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return cc =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var v = [];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;aa.forEach(a =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;bb.forEach(b =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cc.forEach(c =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((a*a + b*b) === c*c) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v.push([a,b,c]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return v;</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp;};</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">triples(aa)(bb)(cc);</div></ol></div></div></div></div><br>
зачем Хаскель это делает?  :blink: <br>
да хз я еще не дошел до этого... вроде бы это связано с его реализацией, а именно лямбда функциями  :unsure:  <br>
в данном коде на JS это делать не обязательно  :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780530</guid>
        <pubDate>Thu, 11 Oct 2018 12:05:41 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780530</link>
        <description><![CDATA[Cfon: Продолжаю изучать удивительный Haskell&#33; :D  <br>
Еще одна задачка на поиск прямоугольных треугольников, дано три списка с числами от 1 до 10 например, надо найти все совпадения прямоугольных треугольников. На хаскеле изи&#33; :D <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">aa =[1..10]</div><div class="code_line">bb = [1..10]</div><div class="code_line">cc = [1..10]</div><div class="code_line">triples aa bb cc = [(a,b,c) | a &#60;- aa, b &#60;- bb, c &#60;- cc, a^2 + b^2 == c^2]</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">[(4,3,5),(3,4,5),(8,6,10),(6,8,10)]</div></ol></div></div></div></div><br>
Как теперь это на JS написать? :wacko: <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="2018-10-11T13:02:48+00:00">11.10.18, 13:02</time></span></span><br>
Переключил моск с функционального на императивный режим :lool: <br>
Оказывается тут идет тупой перебор по трем циклам  :D  <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">const aa = [1,2,3,4,5,6,7,8,9,10];</div><div class="code_line">const bb = [1,2,3,4,5,6,7,8,9,10];</div><div class="code_line">const cc = [1,2,3,4,5,6,7,8,9,10];</div><div class="code_line">&nbsp;</div><div class="code_line">function triples(aa, bb, cc) {</div><div class="code_line">&nbsp;&nbsp;var v=[];</div><div class="code_line">&nbsp;&nbsp;aa.forEach(a =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;bb.forEach(b =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cc.forEach(c =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if ((a*a + b*b) === c*c) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v.push([a,b,c]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp;});</div><div class="code_line">&nbsp;&nbsp;return v;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780435</guid>
        <pubDate>Wed, 10 Oct 2018 08:13:41 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780435</link>
        <description><![CDATA[Cfon: Сам порешал :D <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">function mixin(nouns, adjs) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;return nouns.reduce((a, noun) =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;const v = adjs.map(adj =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return adj + &#39; &#39; + noun;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return [...a, ...v];</div><div class="code_line">&nbsp;&nbsp; &nbsp;}, []);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
На хаскелле как то более проще думать такие задачи, лямбда исчисление рулит&#33; :whistle:<br>
<br>
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">mixin nouns adjs = [adj ++ &quot; &quot; ++ noun | adj &#60;– adjs, noun &#60;– nouns]</div></ol></div></div></div></div><br>
Так изменил в более функциональный стиль JS, но все равно не так очевидно как на Хаскеле :D <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">const mixin = (nouns, adjs) =&#62; nouns.reduce((a, noun) =&#62; [...a, ...adjs.map(adj =&#62; adj + &#39; &#39; + noun)], []);</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780356</guid>
        <pubDate>Tue, 09 Oct 2018 07:01:23 +0000</pubDate>
        <title>Изучаю Haskell</title>
        <link>https://forum.sources.ru/index.php?showtopic=413629&amp;view=findpost&amp;p=3780356</link>
        <description><![CDATA[Cfon: Здрасте&#33;<br>
<br>
начал изучать Haskell  :D <br>
вот пытаюсь перевести на JS код с Haskell но тока в функциональном стиле JS <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">nouns = [&quot;frog&quot;,&quot;raven&quot;,&quot;ribbit&quot;]</div><div class="code_line">adjectives = [&quot;lazy&quot;,&quot;angry&quot;,&quot;tiny&quot;,&quot;happy&quot;,&quot;shy&quot;]</div><div class="code_line">mixin nouns adjectives = [adj ++ &quot; &quot; ++ noun | adj &#60;– adjectives, noun &#60;– nouns]</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">[ &quot;lazy frog&quot;,&quot;angry frog&quot;,&quot;tiny frog&quot;,&quot;happy frog&quot;,&quot;shy frog&quot;,</div><div class="code_line">&quot;lazy raven&quot;,&quot;angry raven&quot;,&quot;tiny raven&quot;,&quot;happy raven&quot;,&quot;shy raven&quot;,</div><div class="code_line">&quot;lazy ribbit&quot;,&quot;angry ribbit&quot;,&quot;tiny ribbit&quot;,&quot;happy ribbit&quot;,&quot;shy ribbit&quot; ]</div></ol></div></div></div></div><br>
<br>
Пробую через Array,reduce, пока стена  :wall:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      </channel>
      </rss>
	