<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Форум 'Декларативное программирование' на RSDN</title>
    <link>http://rsdn.org/Forum/decl/</link>
    <description>Функциональные и логические языки программирования, декларативные расширения императивных языков и другие средства повышения уровня абстракции языков программирования.</description>
    <category>decl</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN, 2001-2007</copyright>
    <webMaster>forum@rsdn.org</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://rsdn.org/rsdn.gif</url>
      <title>RSDN</title>
      <link>http://rsdn.org</link>
    </image>
    <lastBuildDate>Sun, 12 Apr 2026 06:57:20 GMT</lastBuildDate>
    <ttl>5</ttl>
	<item>
		<title>История функционального программирования</title>
		<link>http://rsdn.org/Forum/decl/8977288.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/8977288</guid>
		<comments>http://rsdn.org/Forum/decl/8977288</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8977288</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8977288</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8977288</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Я написал несколько &lt;a class="m" href="https://klapaucius.github.io/fphistoryru/" target="_blank"&gt;постов об истории функционального программирования&lt;/a&gt;. Я смотрю, раздел выглядит заброшенным, но думаю, что стоит запостить ссылку здесь хотя бы потому, что идея написать что-то об истории ФП пришла мне в голову после обсуждения вот этого моего сообщения &lt;a class="m tips" href="http://rsdn.org/forum/flame.comp/2152132" target="_blank"&gt;не философия программирования&lt;/a&gt; на рсдн.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Wed, 13 Aug 2025 13:54:44 GMT</pubDate>
		
			<author>Klapaucius &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>8</slash:comments>
		
	</item>

	<item>
		<title>Java Interop - один и тот же код возвращает разные значения</title>
		<link>http://rsdn.org/Forum/decl/8904727.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/8904727</guid>
		<comments>http://rsdn.org/Forum/decl/8904727</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8904727</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8904727</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8904727</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Решил тут поиграться с прикручиванием Clojure в Java&lt;br /&gt;
Есть такой код:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;public class&lt;/span&gt; Main {

    &lt;span class='kw'&gt;public static void&lt;/span&gt; main(String[] args) {
        &lt;span class='kw'&gt;var&lt;/span&gt; f1 = Clojure.&lt;span class='kw'&gt;var&lt;/span&gt;(&lt;span class='str'&gt;"clojure.core"&lt;/span&gt;, &lt;span class='str'&gt;"eval"&lt;/span&gt;);
        &lt;span class='kw'&gt;var&lt;/span&gt; script =
                &lt;span class='str'&gt;""&lt;/span&gt;&lt;span class='str'&gt;"
                        (=
                         "&lt;/span&gt;a1b2&lt;span class='str'&gt;"
                         (clojure.string/join
                          (map
                           (fn [[a b]] (str a b))
                           (seq ctx))))
                        "&lt;/span&gt;&lt;span class='str'&gt;""&lt;/span&gt;;
        f1.invoke(Clojure.read(&lt;span class='str'&gt;"(defn test [ctx] "&lt;/span&gt; + script + &lt;span class='str'&gt;")"&lt;/span&gt;));
        &lt;span class='kw'&gt;var&lt;/span&gt; r = Clojure.&lt;span class='kw'&gt;var&lt;/span&gt;(&lt;span class='str'&gt;"clojure.core"&lt;/span&gt;, &lt;span class='str'&gt;"test"&lt;/span&gt;)
                .invoke(Map.of(&lt;span class='str'&gt;"a"&lt;/span&gt;, 1, &lt;span class='str'&gt;"b"&lt;/span&gt;, 2));

        System.out.println(r);
    }

}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Который на консоль выводит то true, то false&lt;br /&gt;
Что я делаю не так?&lt;br /&gt;
&lt;br /&gt;
Заранее благодарен!&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Thu, 27 Feb 2025 09:18:08 GMT</pubDate>
		
			<author>kokaku &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>15</slash:comments>
		
	</item>

	<item>
		<title>Покажите, пожалуйста, профит от функционального программирования.</title>
		<link>http://rsdn.org/Forum/decl/8792909.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/8792909</guid>
		<comments>http://rsdn.org/Forum/decl/8792909</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8792909</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8792909</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8792909</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;То есть, два примера консольных программ на Java каждая,&lt;br /&gt;
в первом случае когда программа написана в императивном стиле (можно с ООП),&lt;br /&gt;
а во втором случае, когда эта же самая программа написана в функциональном стиле (с монадами).&lt;br /&gt;
&lt;br /&gt;
Хочу увидеть, как вторая программа сама задействует многоядерность и обгоняет первую в 28 раз (по числу ядер).&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Sun, 04 Aug 2024 09:57:56 GMT</pubDate>
		
			<author>Эйнсток Файр &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>Как работает funcall в Лиспе?</title>
		<link>http://rsdn.org/Forum/decl/8773669.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/8773669</guid>
		<comments>http://rsdn.org/Forum/decl/8773669</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8773669</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8773669</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8773669</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;В Common Lisp такой код с функцией funcall:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;(&lt;span class='kw'&gt;print&lt;/span&gt; (&lt;span class='kw'&gt;funcall&lt;/span&gt;
        (lambda (x y)
                (&lt;span class='kw'&gt;format&lt;/span&gt; NIL &lt;span class='str'&gt;"~d + ~d = ~d"&lt;/span&gt; x y (+ x y))
        )
        2
        3
       )
)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
И такой без нее:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;(&lt;span class='kw'&gt;print&lt;/span&gt; (
        (lambda (x y)
                (&lt;span class='kw'&gt;format&lt;/span&gt; NIL &lt;span class='str'&gt;"~d + ~d = ~d"&lt;/span&gt; x y (+ x y))
        )
        2
        3
       )
)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Работает совершенно аналогично &amp;mdash; вызывает лямбда-выражение с парой параметров и выводит "2 + 3 = 5".&lt;br /&gt;
&lt;br /&gt;
Однако, когда я пытаюсь написать простой пример с ООП:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;(setq User-counter 0)
(&lt;span class='kw'&gt;defun&lt;/span&gt; User (name)
    (&lt;span class='kw'&gt;let&lt;/span&gt;
     (
      (id (setq User-counter (+ User-counter 1)))
     )
     (lambda (method)
             (&lt;span class='kw'&gt;cond&lt;/span&gt;
                 ((&lt;span class='kw'&gt;eq&lt;/span&gt; method &lt;span class='str'&gt;'getId&lt;/span&gt;) (lambda () id))
                 ((&lt;span class='kw'&gt;eq&lt;/span&gt; method &lt;span class='str'&gt;'getName&lt;/span&gt;) (lambda () name))
                 ((&lt;span class='kw'&gt;eq&lt;/span&gt; method &lt;span class='str'&gt;'data&lt;/span&gt;) (lambda () (&lt;span class='kw'&gt;list&lt;/span&gt; id name)))
                 ((&lt;span class='kw'&gt;eq&lt;/span&gt; method &lt;span class='str'&gt;'format&lt;/span&gt;) (lambda (f) (&lt;span class='kw'&gt;format&lt;/span&gt; NIL f id name)))
             )
     )
    )
)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
То вызов методов с funcall работает:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;(&lt;span class='kw'&gt;print&lt;/span&gt; (&lt;span class='kw'&gt;funcall&lt;/span&gt; (&lt;span class='kw'&gt;funcall&lt;/span&gt; (User &lt;span class='str'&gt;"Worminator"&lt;/span&gt;) &lt;span class='str'&gt;'format&lt;/span&gt;) &lt;span class='str'&gt;"id: ~d, name: ~s"&lt;/span&gt;))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
А вот без funcall выдает ошибку:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;(&lt;span class='kw'&gt;print&lt;/span&gt; (((User &lt;span class='str'&gt;"Worminator"&lt;/span&gt;) &lt;span class='str'&gt;'format&lt;/span&gt;) &lt;span class='str'&gt;"id: ~d, name: ~s"&lt;/span&gt;))&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;EVAL: ((USER "Worminator") 'FORMAT) is not a function name; try using a symbol instead&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Почему? Можно ли как-то использовать второй вариант? Что означает not a function name &amp;mdash; вообще не понял. И что делает funcall? Зачем нужна apply &amp;mdash; ясно, она берет аргументы для вызова из списка, а вот с этой функцией непонятно. В другом диалекте Лиспа, Scheme, кстати, не нашел funcall (или там другое имя для нее).&lt;br /&gt;
&lt;br /&gt;
Как-то запутанно все... В учебнике Святослава Лаврова, по которому когда-то учил Лисп, funcall совершенно не упоминалась, там говорилось, что выражение (f a1 ... aN) просто применяет значение f (которое должно быть лямбдой) к аругментам a1-aN и выдает результат. И вообще весь Лисп описывался 10 базовыми функциями: car, cdr, cons, atom, eq, cond, lambda, defun, setq и quote.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Tue, 02 Jul 2024 04:04:51 GMT</pubDate>
		
			<author>Worminator X &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>6</slash:comments>
		
	</item>

	<item>
		<title>Realworld Example FP</title>
		<link>http://rsdn.org/Forum/decl/8141509.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/8141509</guid>
		<comments>http://rsdn.org/Forum/decl/8141509</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8141509</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8141509</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8141509</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Поделитесь ссылками хороших примеров полноценного приложения на ФЯП типа F#(предпочтительно) или любых других.&lt;br /&gt;
Опыта ООП и C# вроде достаточно.&lt;br /&gt;
Последнее время есть стойкое ощущение что ФП будущее(или уже настоящее?). &lt;br /&gt;
Но учебные статьи в основном сосредоточены на каких-то простых примерах.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Fri, 26 Nov 2021 02:17:49 GMT</pubDate>
		
			<author>vaa &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Серия видео по теории категорий медленно</title>
		<link>http://rsdn.org/Forum/decl/8067393.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/8067393</guid>
		<comments>http://rsdn.org/Forum/decl/8067393</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8067393</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8067393</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8067393</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://www.youtube.com/c/RichardSouthwell/playlists" target="_blank"&gt;https://www.youtube.com/c/RichardSouthwell/playlists&lt;/a&gt;&lt;br /&gt;
Там есть плейлист Category Theory For Beginners.&lt;br /&gt;
Изложение довольно медленное, понятное и подробное (возможно кому-то покажется слишком медленное).&lt;br /&gt;
Очень понравилось видео про Universal Properties, наконец-то начал понимать немного.&lt;br /&gt;
У автора этих видео еще и книжка есть по теории категорий  "Categories and Toposes: Visualized and Explained"&lt;br /&gt;
P.S. Не спрашивайте зачем это нужно, just for fun.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Fri, 06 Aug 2021 13:46:43 GMT</pubDate>
		
			<author>HrorH &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Что общего у "carrying" и "lambda calculus"?</title>
		<link>http://rsdn.org/Forum/decl/8040413.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/8040413</guid>
		<comments>http://rsdn.org/Forum/decl/8040413</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8040413</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8040413</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8040413</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Во всех статьях, где описывается что такое каррирование вопрос зачем оно &amp;mdash; выносят за рамки статьи.&lt;br /&gt;
Приведу цитаты:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Currying provides a way for working with functions that take multiple arguments, &lt;br /&gt;
and using them in frameworks where functions might take only one argument.&lt;br /&gt;
For example, &lt;b&gt;&lt;i&gt;some&lt;/i&gt;&lt;/b&gt; analytical techniques can only be applied to functions with a single argument.&lt;br /&gt;
Practical functions frequently take more arguments than this.&lt;/p&gt;&lt;/blockquote&gt;
(какие именно аналитические техники могут быть применены только к функциям одного аргумента?)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Карирование это не продвинутая техника/паттерн работы с функциями.&lt;br /&gt;
Это необходимость возникшая в рамках лямбда исчислений,&lt;br /&gt;
где вводить функции работающие от более чем одного аргумента&lt;br /&gt;
это &lt;b&gt;&lt;i&gt;усложнять&lt;/i&gt;&lt;/b&gt; красивую стройную концепцию.&lt;/p&gt;&lt;/blockquote&gt;
(и в чём же суть этого усложнения? что за концепция?)&lt;br /&gt;
&lt;br /&gt;
Меня не интересуют "передача коллбеков по-человечески", "оно используется в LINQ", "удобно в Unit-тестировании".&lt;br /&gt;
&lt;br /&gt;
Меня интересует только для доказательства корректности программ.&lt;br /&gt;
(Я прочитал книжку, которую &lt;a class=" tips m" href="https://rsdn.org/forum/apptesting/7962461.1" rel="#LiZFwU" target="_blank" title="деятельность по доказательству корректности программ"&gt;рекомендовали&lt;div class="tooltip" id="LiZFwU"&gt;Автор: Pzz&lt;br /&gt;Дата: 28.02.21&lt;/div&gt;&lt;/a&gt;, Дейкстры,&lt;br /&gt;
и там было интересно про алгоритм НОД при помощи специальной машины-не-компьютера,&lt;br /&gt;
но до практического написания доказуемо корректных программ у меня пока не дошло).&lt;br /&gt;
&lt;br /&gt;
Статьи в интернете слишком короткие и не связанные между собой.&lt;br /&gt;
Книжки слишком сложные. А учить меня никто не обязан. Как жить?&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Wed, 30 Jun 2021 19:41:15 GMT</pubDate>
		
			<author>Эйнсток Файр &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>Youtube-канал F#</title>
		<link>http://rsdn.org/Forum/decl/7871108.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7871108</guid>
		<comments>http://rsdn.org/Forum/decl/7871108</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7871108</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7871108</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7871108</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://www.youtube.com/channel/UCsi00IVEgPoK7HvcpWDeSxQ" target="_blank"&gt;Канал F#&lt;/a&gt;&lt;br /&gt;
Дон Сайм рассказывает принцип работы компилятора. Не плохо смотрится.&lt;br /&gt;
Как сказал Дон для тех "кто хочет погрузиться".&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Tue, 03 Nov 2020 07:38:14 GMT</pubDate>
		
			<author>varenikAA &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>F# и уменьшение сложности алгоритма поиска пересечений всех </title>
		<link>http://rsdn.org/Forum/decl/7660213.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7660213</guid>
		<comments>http://rsdn.org/Forum/decl/7660213</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7660213</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7660213</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7660213</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;есть следующая задачка. найти все возможные пересечения в списке, которые содержит в себе "дороги", то есть объекты, состоящие из координат. нарисовал координатную сетку 8х8 и на ней 4 горизонтальные и 3 вертикальные линии. в коде это выглядит как то так&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;let rh1 =
        road "rh1" [ // дорога содержит имя и список точек
                        point (1., 7., 0.) [BEGIN; COORDINATE]; // точка point (x,y,z) - координата, [] - содержит массив типов точки (не имеет значения в данном случае)
                        point (3., 7., 0.) [COORDINATE];
                        point (5., 7., 0.) [COORDINATE];
                        point (7., 7., 0.) [COORDINATE];
                        point (8., 7., 0.) [COORDINATE; TRAFFICLIGHT; END];
                    ]

    let rh2 =
        road "rh2" [
                        point (1., 5., 0.) [BEGIN; COORDINATE];
                        point (3., 5., 0.) [COORDINATE];
                        point (5., 5., 0.) [COORDINATE];
                        point (7., 5., 0.) [COORDINATE];
                        point (8., 5., 0.) [COORDINATE; TRAFFICLIGHT; END];
                    ]

    let rh3 =
        road "rh3" [
                        point (1., 3., 0.) [BEGIN; COORDINATE];
                        point (3., 3., 0.) [COORDINATE];
                        point (5., 3., 0.) [COORDINATE];
                        point (7., 3., 0.) [COORDINATE];
                        point (8., 3., 0.) [COORDINATE; TRAFFICLIGHT; END];
                    ]

    let rh4 =
        road "rh4" [
                        point (1., 1., 0.) [BEGIN; COORDINATE];
                        point (3., 1., 0.) [COORDINATE];
                        point (5., 1., 0.) [COORDINATE];
                        point (7., 1., 0.) [COORDINATE];
                        point (8., 1., 0.) [COORDINATE; TRAFFICLIGHT; END];
                    ]

    let rv1 =
        road "rv1" [
                        point (3., 8., 0.) [BEGIN; COORDINATE];
                        point (3., 7., 0.) [COORDINATE];
                        point (3., 5., 0.) [COORDINATE];
                        point (3., 3., 0.) [COORDINATE];
                        point (3., 1., 0.) [COORDINATE];
                        point (3., 0., 0.) [END; COORDINATE; TRAFFICLIGHT];
                    ]

    let rv2 =
        road "rv2" [
                        point (5., 8., 0.) [BEGIN; COORDINATE];
                        point (5., 7., 0.) [COORDINATE];
                        point (5., 5., 0.) [COORDINATE];
                        point (5., 3., 0.) [COORDINATE];
                        point (5., 1., 0.) [COORDINATE];
                        point (5., 0., 0.) [END; COORDINATE; TRAFFICLIGHT];
                    ]

    let rv3 =
        road "rv3" [
                        point (7., 8., 0.) [BEGIN; COORDINATE];
                        point (7., 7., 0.) [COORDINATE];
                        point (7., 5., 0.) [COORDINATE];
                        point (7., 3., 0.) [COORDINATE];
                        point (7., 1., 0.) [COORDINATE];
                        point (7., 0., 0.) [END; COORDINATE; TRAFFICLIGHT];
                    ]&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
далее вызываю соответствующий метод для получения множества всех возможных пересечений (должно быть 12) пересечений&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;let crossrods = Road.CrossRoads [rh1; rh2; rh3; rh4; rv1; rv2; rv3]

crossrods
|&amp;gt; Seq.iter (fun x -&amp;gt; printfn "position x: %f, y: %f" x.p.x x.p.y)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
код алгоритма привожу ниже (весь тип не привожу, только то, что нужно)&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;let (|Includes|DoesntIncludes|) (point, list) = 
    let tryPoint = List.tryFind (fun c2 -&amp;gt;
                                    if point == c2.p then
                                        true
                                    else
                                        false) list
    match tryPoint with
        | Some(x) -&amp;gt; Includes x
        | _ -&amp;gt; DoesntIncludes

static member CrossRoads2 r1 r2 =

    r1.pl
    |&amp;gt; List.filter (fun c1 -&amp;gt; match (c1.p, r2.pl) with
                                          | Includes(_) -&amp;gt; true
                                          | _ -&amp;gt; false
                               )

static member CrossRoads (roads: Road list) =

    let rec inCross r roads res = 
        match roads with
        | h::t when h.n &amp;lt;&amp;gt; r.n -&amp;gt;
            let nextRes = Seq.append res (Road.CrossRoads2 r h)
            inCross r t nextRes
        | _::t -&amp;gt;
            inCross r t res
        | [] -&amp;gt; res

    roads
        |&amp;gt; Seq.map (fun x -&amp;gt; inCross x roads Seq.empty)
        |&amp;gt; Seq.collect (fun r -&amp;gt; r)
        |&amp;gt; Seq.distinct // это фиксит проблему двойного результата&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
код работает корректно, но результаты удваиваются, то есть итоговый список содержал дважды правильные ответы. проблема фиксится путем добавления &lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;|&amp;gt; Seq.distinct&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
поскрипев мозгами, прихожу к выводу, что двойные результаты обусловлены тем, что алгоритм дважды проходит один и тот же путь (сначала он горизонтальную линии пересекает с вертикальной, а потом вертикальную с горизонтальной). думаю, что по идее проблему также можно пофиксить и мемоизацией, но:&lt;br /&gt;
&lt;br /&gt;
1. оттого сложность алгоритма все равно не уменьшится. все равно сначала нужно получить результат, а потом смотреть мемоизацию&lt;br /&gt;
2. опять таки не совсем понятно, как эту мемоизацию в данном случае использовать и будет ли она работать лучше или быстрее дистинкта.&lt;br /&gt;
&lt;br /&gt;
отсюда возникает вопрос, как можно все таки избежать мемоизации и одновременно не просчитывать один и тот же путь дважды?&lt;br /&gt;
ну и в принципе? как можно сделать алгоритм менее сложным.&lt;br /&gt;
&lt;br /&gt;
спасибо&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Mon, 17 Feb 2020 16:19:12 GMT</pubDate>
		
			<author>zverjuga &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Хвостовая рекурсия при ветвлении в ширь</title>
		<link>http://rsdn.org/Forum/decl/7609975.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7609975</guid>
		<comments>http://rsdn.org/Forum/decl/7609975</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7609975</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7609975</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7609975</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Попалась головоломка:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;type&lt;/span&gt; Tree&amp;lt;'a&amp;gt; =
  | Leaf &lt;span class='kw'&gt;of&lt;/span&gt; 'a
  | Branch &lt;span class='kw'&gt;of&lt;/span&gt; 'a * Tree&amp;lt;'a&amp;gt; &lt;span class='kw'&gt;list


let&lt;/span&gt; getInfoList a =
  &lt;span class='kw'&gt;if&lt;/span&gt; System.DateTime.UtcNow.Ticks % 10L &amp;gt; 5L 
  &lt;span class='kw'&gt;then&lt;/span&gt; [ a*2L; a*4L; ]
  &lt;span class='kw'&gt;else&lt;/span&gt; []


&lt;span class='kw'&gt;let rec&lt;/span&gt; buildTree a =
    &lt;span class='kw'&gt;let&lt;/span&gt; lst = getInfoList a
    
    &lt;span class='kw'&gt;if&lt;/span&gt; List.isEmpty lst 
    &lt;span class='kw'&gt;then&lt;/span&gt;
      Leaf (a)
    &lt;span class='kw'&gt;else
      let&lt;/span&gt; subTrees = List.map buildTree lst
      Branch (a, subTrees)


&lt;span class='kw'&gt;let&lt;/span&gt; r = buildTree 1L&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
buildTree возможно ли сделать рекурсих хвостовой? Мне почему-то кажется, что нет, но как это доказать не пойму.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Fri, 13 Dec 2019 04:13:17 GMT</pubDate>
		
			<author>varenikAA &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>6</slash:comments>
		
	</item>

	<item>
		<title>F# и хвостовая рекурсия</title>
		<link>http://rsdn.org/Forum/decl/7578868.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7578868</guid>
		<comments>http://rsdn.org/Forum/decl/7578868</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7578868</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7578868</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7578868</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;имеется двумерный массив, заполненый 1 и 0. по сути &amp;mdash; это бинарное изображение, где 0 &amp;mdash; это черные пиксели, а 1 &amp;mdash; белые. само изображение организовано так, что белые пиксели организованы по группам, которые разделены между собой черными пикселями (стенками).&lt;br /&gt;
&lt;br /&gt;
задача: найти белые пятна на картинке и каждое пятно маркиковать отдельным числом. например, на картинке 3 белых пятна, разделенные черными стенками. то есть в итоговой картинке каждое пятно (состоящее из белых пикселей) обозначено числами 2, 3, 4 и так далее. реализован данный алгоритм так&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;// Learn more about F# at http://fsharp.org

&lt;span class='kw'&gt;open&lt;/span&gt; System

&lt;span class='kw'&gt;let&lt;/span&gt; source = array2D [[1; 1; 0; 1; 1; 1; 0; 1];
                      [1; 1; 0; 1; 0; 1; 0; 1];
                      [1; 1; 1; 1; 0; 0; 0; 1];
                      [0; 0; 0; 0; 0; 0; 0; 1];
                      [1; 1; 1; 1; 0; 1; 0; 1];
                      [0; 0; 0; 1; 0; 1; 0; 1];
                      [1; 1; 0; 1; 0; 0; 0; 1];
                      [1; 1; 0; 1; 0; 1; 1; 1]]

&lt;span class='kw'&gt;let&lt;/span&gt; (|Value|Zero|Out|) ((x: &lt;span class='kw'&gt;int&lt;/span&gt;), (y: &lt;span class='kw'&gt;int&lt;/span&gt;)) = 
    &lt;span class='kw'&gt;if&lt;/span&gt; x &amp;lt; 0 || y &amp;lt; 0 || x &amp;gt; (source.[0,*].Length - 1) || y &amp;gt; (source.[*,0].Length - 1) &lt;span class='kw'&gt;then&lt;/span&gt;
        Out
    &lt;span class='kw'&gt;else
        let&lt;/span&gt; row = source.[y, *]
        &lt;span class='kw'&gt;match&lt;/span&gt; row.[x] &lt;span class='kw'&gt;with&lt;/span&gt;
            | 0 -&amp;gt; Zero
            | v -&amp;gt; Value(v)

&lt;span class='kw'&gt;let&lt;/span&gt; processSource x y value =

    &lt;span class='kw'&gt;let rec&lt;/span&gt; markBits x y value =
        &lt;span class='kw'&gt;match&lt;/span&gt; (x, y) &lt;span class='kw'&gt;with&lt;/span&gt;
        | Value(v) -&amp;gt;
            &lt;span class='kw'&gt;if&lt;/span&gt; v &amp;lt;&amp;gt; value &lt;span class='kw'&gt;then&lt;/span&gt;
                source.[y, x] &amp;lt;- value
                markBits (x + 1) y value
                markBits (x - 1) y value
                markBits x (y + 1) value
                markBits x (y - 1) value
        | Zero | Out -&amp;gt; ()

    markBits x y value

[&amp;lt;EntryPoint&amp;gt;]
&lt;span class='kw'&gt;let&lt;/span&gt; main argv =
    printfn &lt;span class='str'&gt;"Hello World from F#!"&lt;/span&gt;

    printfn &lt;span class='str'&gt;"origin"&lt;/span&gt;
    printfn &lt;span class='str'&gt;"%A"&lt;/span&gt; source
    printfn &lt;span class='str'&gt;"--------------"&lt;/span&gt;

    &lt;span class='kw'&gt;let mutable&lt;/span&gt; value = 2

    source
    |&amp;gt; Array2D.iteri (&lt;span class='kw'&gt;fun&lt;/span&gt; y x e -&amp;gt; &lt;span class='kw'&gt;if&lt;/span&gt; e = 1 &lt;span class='kw'&gt;then&lt;/span&gt;
                                        processSource x y value
                                        value &amp;lt;- value + 1)

    printfn &lt;span class='str'&gt;"modified"&lt;/span&gt;
    printfn &lt;span class='str'&gt;"%A"&lt;/span&gt; source
    0 // return an integer exit code&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
результат работы такой&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;Hello World from F#!
origin
[[1; 1; 0; 1; 1; 1; 0; 1]
 [1; 1; 0; 1; 0; 1; 0; 1]
 [1; 1; 1; 1; 0; 0; 0; 1]
 [0; 0; 0; 0; 0; 0; 0; 1]
 [1; 1; 1; 1; 0; 1; 0; 1]
 [0; 0; 0; 1; 0; 1; 0; 1]
 [1; 1; 0; 1; 0; 0; 0; 1]
 [1; 1; 0; 1; 0; 1; 1; 1]]
--------------
modified
[[2; 2; 0; 2; 2; 2; 0; 3]
 [2; 2; 0; 2; 0; 2; 0; 3]
 [2; 2; 2; 2; 0; 0; 0; 3]
 [0; 0; 0; 0; 0; 0; 0; 3]
 [4; 4; 4; 4; 0; 5; 0; 3]
 [0; 0; 0; 4; 0; 5; 0; 3]
 [6; 6; 0; 4; 0; 0; 0; 3]
 [6; 6; 0; 4; 0; 3; 3; 3]]&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
по задумке, функция processSource реализована по принцицам хвостовой рекурсии, однако отладчик показывает, что каждый вызов рекурсивной функции markBits добавляет новый кадр в стек. то есть хвостовая рекурсия не работает. не могу понять, почему? ведь задача каждого кадра &amp;mdash; всего лишь отметить очередной пиксель нужным числом и вызвать такую же функцию для всех соседних пикселей. сам кадр рекурсии обратно ничего не вычисляет и не возвращает. то есть компилятору нет смысла делать обычную рекурсию.&lt;br /&gt;
&lt;br /&gt;
в чем ошибка? спасибо&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Wed, 30 Oct 2019 21:18:06 GMT</pubDate>
		
			<author>zverjuga &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Design and Interpretation of Haskell Programs</title>
		<link>http://rsdn.org/Forum/decl/7567949.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7567949</guid>
		<comments>http://rsdn.org/Forum/decl/7567949</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7567949</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7567949</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7567949</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Похоже Sandy Maguire пишет &lt;a class="m" href="https://www.patreon.com/designandinterpretation" target="_blank"&gt;новую книгу&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;But if functional programming is so good, why hasn't it yet taken over the world?&lt;br /&gt;
&lt;br /&gt;
This is a very serious question. If we're right about this, why haven't we won?&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Wed, 16 Oct 2019 07:40:09 GMT</pubDate>
		
			<author>HrorH &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>F# обращение к элементу кортежа по порядковому номеру</title>
		<link>http://rsdn.org/Forum/decl/7547330.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7547330</guid>
		<comments>http://rsdn.org/Forum/decl/7547330</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7547330</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7547330</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7547330</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;приветствую знатоков F#&lt;br /&gt;
&lt;br /&gt;
возник следующий вопрос, есть ли возможность обращаться к элементу кортежа по его порядковому номеру? сам я такой информации не нашел ни в учебнике майкрофосф, ни в книге криса смитта. но книга уже старая, ей лет 8 кажись, потому возникла мысль, может есть какой прогресс? на данный момент получается, что для работы с кортежем надо обязательно перечислить все его элементы и присвоить им имена. например&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;let (a, b, c, d) = (1, 2, 3, 4)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
в некоторых случаях это кажется излишним и хотелось бы упрощенки, как это например сделано в swift&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;let tuple = (1, 2, 3, 4)
tuple.0 // обращение к первому элементу кортежа
tuple.1 // обращение ко второму элементу кортежа
tuple.2 // обращение к третьем элементу кортежа
tuple.3 // обращение к четвертому элементу кортежа&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
печально и странно, если подобной возможности в F# нет, хотя она так и напрашивается.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Fri, 20 Sep 2019 12:19:39 GMT</pubDate>
		
			<author>zverjuga &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>24</slash:comments>
		
	</item>

	<item>
		<title>Formality. Новый язык зависимых типов</title>
		<link>http://rsdn.org/Forum/decl/7543456.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7543456</guid>
		<comments>http://rsdn.org/Forum/decl/7543456</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7543456</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7543456</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7543456</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="github m" href="https://github.com/moonad/formality" target="_blank"&gt;Formality&lt;/a&gt; (см там внизу страницы мультик)&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="http://docs.formality-lang.org/en/latest/" target="_blank"&gt;Документация&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Что интересного:&lt;br /&gt;
&lt;a class="m" href="https://medium.com/@maiavictor/solving-the-mystery-behind-abstract-algorithms-magical-optimizations-144225164b07" target="_blank"&gt;Solving the mystery behind Abstract Algorithm’s magical optimizations&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="https://medium.com/@maiavictor/the-abstract-calculus-fe8c46bcf39c" target="_blank"&gt;Своя версия лямбда исчисления&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="https://medium.com/@maiavictor/towards-a-simple-theorem-prover-5005a1e66a6f" target="_blank"&gt;Towards a simple theorem prover&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="https://medium.com/@maiavictor/calling-a-function-a-googol-times-53933c072e3a" target="_blank"&gt;Can we call a function a googol times?&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="github m" href="https://github.com/moonad/whitepaper" target="_blank"&gt;Своя операционная система Moonad&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Okay, nobody reads my Twitter, so I realized I can make random, misguided predictions here and nobody will call me dumb if they don't work out, yet I can tell everyone I was right if they do!&lt;br /&gt;
&lt;br /&gt;
So, here is one: there are many similarities between applying quantum operators to multiple values, and performing computations on highly shared terms of interaction combinators. Conjecture: interaction nets can perform Shor's Algorithm efficiently in classical computers.&lt;/p&gt;&lt;/blockquote&gt;
Victor Maia&lt;br /&gt;
&lt;br /&gt;
Теги:  Affine logic, Self types, SYMMETRIC INTERACTION COMBINATORS, Магия, Cedille, Juvix&lt;br /&gt;
&lt;br /&gt;
P.S. Похоже про interaction net лучше сначала прочитать статью &lt;a class="m" href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.112.2822&amp;rep=rep1&amp;type=pdf" target="_blank"&gt;interaction net Lafont&lt;/a&gt; &lt;br /&gt;
потом &lt;a class="m" href="https://pdfs.semanticscholar.org/6cfe/09aa6e5da6ce98077b7a048cb1badd78cc76.pdf" target="_blank"&gt;Yves Lafont, Interation Combinators, Institut de Mathematiques de Luminy, 1997&lt;/a&gt;&lt;br /&gt;
и потом &lt;a class="m" href="https://pdfs.semanticscholar.org/1731/a6e49c6c2afda3e72256ba0afb34957377d3.pdf" target="_blank"&gt;A Denotational Semantics for the Symmetric Interaction Combinators Mazza&lt;/a&gt;&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Sun, 15 Sep 2019 12:50:56 GMT</pubDate>
		
			<author>HrorH &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Elixir, подводные камни, лучшие практики и т.п.</title>
		<link>http://rsdn.org/Forum/decl/7511213.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7511213</guid>
		<comments>http://rsdn.org/Forum/decl/7511213</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7511213</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7511213</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7511213</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Разыскивается информация по лучшим практикам, подводным камням и т.п. для back-end разработки на Elixir. В принципе, гуглить я умею и восторженных отзывов о том, как всё стало после использования Elixir уже нашел... но а что там плохо? Где и когда все разваливается? Какие практики лучше себя зарекомендовали что бы не развалилось? Поделитесь информацией, пожалуйста &lt;img border='0' width='40' height='20' src='//rsdn.org/Forum/images/user.gif' /&gt;&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Mon, 05 Aug 2019 10:57:10 GMT</pubDate>
		
			<author>kaa.python &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>F#, вычисление дистанции между узлами дерева</title>
		<link>http://rsdn.org/Forum/decl/7500040.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7500040</guid>
		<comments>http://rsdn.org/Forum/decl/7500040</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7500040</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7500040</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7500040</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;приветствую. засел за изучение F#. язык и подход для меня новый, все переворачивается с ног на голову, потому прошу помощи. имеется следующий код&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;module&lt;/span&gt; Street

    &lt;span class='kw'&gt;type&lt;/span&gt; Paint =
        | FillColor &lt;span class='kw'&gt;of&lt;/span&gt; float
        | BorderColor &lt;span class='kw'&gt;of&lt;/span&gt; float
        | BorderWidth &lt;span class='kw'&gt;of&lt;/span&gt; float

    &lt;span class='kw'&gt;type&lt;/span&gt; Point =
        | Position &lt;span class='kw'&gt;of&lt;/span&gt; x:float * y:float
        | Description &lt;span class='kw'&gt;of string&lt;/span&gt;
        | Radius &lt;span class='kw'&gt;of&lt;/span&gt; float
        | Lanes &lt;span class='kw'&gt;of&lt;/span&gt; uint32

    &lt;span class='kw'&gt;type&lt;/span&gt; Street =
        | Node &lt;span class='kw'&gt;of&lt;/span&gt; Street * Point &lt;span class='kw'&gt;list&lt;/span&gt; * Street // back * points * right. street like tree
        | Empty

    &lt;span class='kw'&gt;let&lt;/span&gt; distance (pt1: Point) (pt2: Point) =
        &lt;span class='kw'&gt;let&lt;/span&gt; square x = x * x
        sqrt &amp;lt;| square (pt1.x - pt2.x) + square (pt1.y - pt2.y)&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
смысл следующий. тип Stree &amp;mdash; это дорога, представленная в виде дерева. в самом простом случае это дерево имеет вид простого списка, без ответвлений, вот его и рассматриваю.&lt;br /&gt;
тип Street хранит в себе узлы (предыдущий, следующий) список типов Point, которые описывают конкретный узел. Point можно рассматривать как некий атрибут, который может принимать следующие типы&lt;br /&gt;
&lt;br /&gt;
Position &amp;mdash; координата&lt;br /&gt;
Descriptiom &amp;mdash; текстовое описание&lt;br /&gt;
Radius &amp;mdash; радиус&lt;br /&gt;
Lanes &amp;mdash; количество полос&lt;br /&gt;
&lt;br /&gt;
каждый нод Street может хранить в себе произвольное количество Point&lt;br /&gt;
&lt;br /&gt;
ну суть здесь не в этом. а в том, что получаю ошибку компиляции функции distance&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;Error	FS0039	The field, constructor or member 'x/y' is not defined.&lt;/p&gt;&lt;/blockquote&gt;
&lt;br /&gt;
смысл ошибки понятен, но не совсем понятно, как сказать компилятору, что тип Point на самом деле является Position. пробовал разные способы&lt;br /&gt;
&lt;br /&gt;
pt1: Point(x, y)&lt;br /&gt;
pt1: Point(x:float, y: float)&lt;br /&gt;
pt1: Position&lt;br /&gt;
pt1: Position(x, y)&lt;br /&gt;
&lt;br /&gt;
и так далее&lt;br /&gt;
&lt;br /&gt;
может кто подсказать, как заставить компилятор понять, какой тип я передаю в distance?&lt;br /&gt;
&lt;br /&gt;
благодарю&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Mon, 22 Jul 2019 21:29:53 GMT</pubDate>
		
			<author>zverjuga &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>22</slash:comments>
		
	</item>

	<item>
		<title>Посоветуйте книгу по Haskell</title>
		<link>http://rsdn.org/Forum/decl/7398864.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7398864</guid>
		<comments>http://rsdn.org/Forum/decl/7398864</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7398864</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7398864</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7398864</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Давно задумываюсь над изучением какого-нибудь функционального языка, дабы расширить свое сознатие и постичь дзэн. Выбираю между лиспом и хаскелем, склоняюсь в пользу последнего, хотя на первом у нас на работе есть проект, с которым я даже периодически косвенно сталкиваюсь. Но второй вроде как моднее/современнее, да и в вакансиях иногда мелькает.&lt;br /&gt;
&lt;br /&gt;
Так вот, что лучше взять для изучения Хасекля? &lt;a class="m" href="https://www.ozon.ru/context/detail/id/148016677/" target="_blank"&gt;Курта&lt;/a&gt; или &lt;a class="m" href="https://www.ozon.ru/context/detail/id/139640075/" target="_blank"&gt;Липовача&lt;/a&gt;? Первая вроде посовременнее, но и цена +500р. Стоит ли оно того?&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Tue, 19 Mar 2019 09:45:42 GMT</pubDate>
		
			<author>koenjihyakkei &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>10</slash:comments>
		
	</item>

	<item>
		<title>Все пишут книги по Haskell</title>
		<link>http://rsdn.org/Forum/decl/7339726.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7339726</guid>
		<comments>http://rsdn.org/Forum/decl/7339726</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7339726</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7339726</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7339726</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Некоторое время назад вышел перевод книги &lt;a class="m" href="https://www.ozon.ru/context/detail/id/148016677/" target="_blank"&gt;Программируй на Haskell&lt;/a&gt;.&lt;br /&gt;
Книга для начинающих. &lt;br /&gt;
Решил поискать есть ли что-нибудь для тех кто уже что-то знает. &lt;br /&gt;
Нашел следующее (большая часть книг еще пишется):&lt;br /&gt;
&lt;a class="m" href="https://www.manning.com/books/haskell-in-depth" target="_blank"&gt;Haskell in Depth&lt;/a&gt;&lt;br /&gt;
&lt;a class="m" href="https://leanpub.com/thinking-with-types" target="_blank"&gt;Thinking with Types&lt;/a&gt;&lt;br /&gt;
&lt;a class="m" href="https://intermediatehaskell.com/" target="_blank"&gt;Intermediate Haskell&lt;/a&gt;&lt;br /&gt;
&lt;a class="m" href="https://joyofhaskell.com/" target="_blank"&gt;The Joy of Haskell&lt;/a&gt;&lt;br /&gt;
&lt;a class="m" href="http://haskellbook.com/" target="_blank"&gt;Haskell programming from first principles&lt;/a&gt;&lt;br /&gt;
&lt;a class="m" href="https://lorepub.com/product/cookbook" target="_blank"&gt;Haskell Almanac&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Такое впечатление, что что-то происходит. Haskell стали использовать в production?&lt;br /&gt;
P.S. Ревью некоторых книг &lt;a class="m" href="https://medium.com/@_bravit" target="_blank"&gt;от одного из авторов&lt;/a&gt;.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Fri, 04 Jan 2019 08:55:16 GMT</pubDate>
		
			<author>HrorH &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>17</slash:comments>
		
	</item>

	<item>
		<title>Cloverage и maven- как?</title>
		<link>http://rsdn.org/Forum/decl/7338588.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7338588</guid>
		<comments>http://rsdn.org/Forum/decl/7338588</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7338588</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7338588</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7338588</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Есть ли у кого success story, как запустить cloverage хотя бы и из командной строки, а лучше из maven-execute-plugin, не связываясь с leiningen?&lt;img border='0' width='70' height='25' src='//rsdn.org/Forum/images/maniac.gif' /&gt;&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Wed, 02 Jan 2019 09:05:22 GMT</pubDate>
		
			<author>Тёмчик &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Жизнь с Clojure в окружении Java</title>
		<link>http://rsdn.org/Forum/decl/7328880.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/decl/7328880</guid>
		<comments>http://rsdn.org/Forum/decl/7328880</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=7328880</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/7328880</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=7328880</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Прицепил Clojure в связку модулей, код вызывается и отдаёт (пока ещё ничего не отдаёт) в Java. Ну learning curve у него довольно steep. Нагенерить жавских интерфейсов и классов заняло полтора дня с гуглением. Понимаю, что тупой. Поддержите что-ли, что дальше должно быть легче. Осталось перенести простую логику чтения JSON с Groovy в этот новый код на Clojure.&lt;/div&gt;
				
		</description>
		
		<category>decl</category>
		<pubDate>Wed, 19 Dec 2018 20:31:39 GMT</pubDate>
		
			<author>Тёмчик &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>
</channel>
</rss>
