
Vasily
15.05.2017
14:16:10
Имеет смысл читать так : "если входной объект можно представить в виде hd::tl, то выполнить такие-то действия"

Pavel
15.05.2017
14:16:27
type List<'t> =
| ([])
| (::) of hd: 't * tail : List<'t>

Friedrich
15.05.2017
14:16:31

Vasily
15.05.2017
14:16:40

Google

Илья
15.05.2017
14:16:58

Artemy
15.05.2017
14:17:11

Pavel
15.05.2017
14:17:33
Это не из хаскеля, это просто хитрый кейс у Discriminated Union

Илья
15.05.2017
14:17:52

Friedrich
15.05.2017
14:17:53
Для того который не подойдет под предыдущие условия?
Конкретно в том выражении этот паттерн подойдёт для любого списка, который не совпал с предыдущими паттернами. Поэтому в том конкретном месте оно используется просто чтобы сразу разбить его на две переменных.

Pavel
15.05.2017
14:18:02
Можно для простоты считать это оператором, который конструирует новый список добавлением "головного" элемента, и в pattern matching деконструирет его из головы и хвоста

Friedrich
15.05.2017
14:18:40
Чёт мы не можем объяснить человеку ?
Функциональное программирование нас совсем испортило!

Vasily
15.05.2017
14:18:52
Ну сложно для восприятия, да

Friedrich
15.05.2017
14:19:01
Я согласен, что это сложно с наскоку.

Vasily
15.05.2017
14:19:09
Особенно когда юный мозг отравлен императивным программированием

Friedrich
15.05.2017
14:19:31
@DarkByte2016, местные не могут тебе помочь. Попробуй сам разобраться, почитай книжку, вдумайся в суть ⓒ ™

Илья
15.05.2017
14:19:38

Google

Vasily
15.05.2017
14:19:47
Угу

Friedrich
15.05.2017
14:20:02

Илья
15.05.2017
14:20:02
Фууух.... Сложна... Вроде понял

Pavel
15.05.2017
14:20:04
И не забывай про пустой список

Friedrich
15.05.2017
14:20:15

Vasily
15.05.2017
14:20:25
Пустой список не подходит под этот паттерн, да

Pavel
15.05.2017
14:20:27
Да, там почему-то три варианта отсечено

Friedrich
15.05.2017
14:20:37

Vasily
15.05.2017
14:20:39
Для ускорения, думаю

Friedrich
15.05.2017
14:20:47
gotcha

Илья
15.05.2017
14:20:54

Vasily
15.05.2017
14:21:24
Это меня в свое время проплющило с того, как в Java массивы объявляются
Под капотом
И списки
Я чуть не поседел

Илья
15.05.2017
14:22:25

Friedrich
15.05.2017
14:22:34
FSharp.Core любит такие же паттерны вводить: https://github.com/fsharp/fsharp/blob/ebf311505d8035e7ba53bcc7493067f8fe8ba5f9/src/fsharp/FSharp.Core/list.fs#L329-L333

Дед Пегас
15.05.2017
14:22:44

Friedrich
15.05.2017
14:23:06

Илья
15.05.2017
14:25:02

Google

Friedrich
15.05.2017
14:25:16
Может, есть и исключения, но основные компиляторы C++ тесно связаны каждый со своей реализацией стандартной библиотеки.

Artemy
15.05.2017
14:26:04
@DarkByte2016, вообще, я "вводился" в ФП с помощью курса FP101X на edx. Не знаю, насколько хорош он на самом деле, но мне вроде становилось более менее понятно. Правда, это было на 2-м курсе у меня, так что я не был сильно привыкшим к императивному и ОО программированию. :)
Но там на примере Хаскелля всё объясняется.

Vasily
15.05.2017
14:26:28
Я к f# уже лет 5 присматриваюсь
Ну да до меня долго доходит

Friedrich
15.05.2017
14:27:19
Я около года пытался безуспешно въехать в Haskell и Lisp, и ничего в них не понимал (хотя, может, был молодой и глупый). А потом однажды начал читать про Erlang, и удивительно быстро втянулся в ФП. После этого остальные языки перестали казаться такими непонятными.

Roman
15.05.2017
14:29:29
Про список будет понятнее если сразу говорить что список односвязный и любой список либо пустой либо состоит из головы и другого списка

Friedrich
15.05.2017
14:30:51
Обождите, пускай у человека в голове уляжется то, что он уже изучил. Потом сможем постепенно пересказать ему основные определения :)
(а определение дано хорошее и полезное, да)

Roman
15.05.2017
14:31:54
Так это базовое, не надо говорить про деконструкторы, надо начинать с базовых типов

Artemy
15.05.2017
14:32:05

Friedrich
15.05.2017
14:32:52

Artemy
15.05.2017
14:35:21
А, ну другая ситуация. Я вот на момент знакомства с Хаскеллем только-только в ООП въезжал.

Илья
15.05.2017
14:35:35

Artemy
15.05.2017
14:35:35
Так что был свеж, так сказать. :)

Friedrich
15.05.2017
14:36:01

Алекс
15.05.2017
15:16:34
Вопрос из области философии.. может ли быть основным несколько или только один, а другие если только как опции? Ведь язык программирования это как способ думать. Нельзя же думать на нескольких языках сразу..

Most
15.05.2017
15:16:55
Нельзя на языках программирования думать :\

Artemy
15.05.2017
15:17:34
:D

Google

Most
15.05.2017
15:17:45
адепты брейнфака в студию)

Roman
15.05.2017
15:56:27
Привет!

Volha
15.05.2017
15:56:41
привет)

Roman
15.05.2017
15:57:01
привет)
Есть опыт с F#? Есть чем поделиться?

Volha
15.05.2017
15:58:10
серьёзного опыта, опыта в продакшне пока увы нету( изучение и баловство только

Roman
15.05.2017
15:58:35

Volha
15.05.2017
15:59:13
давненько, с 2013

Admin
ERROR: S client not available

Volha
15.05.2017
15:59:43
в смысле, тогда заинтересовалась

Roman
15.05.2017
16:00:16
Круто. А сейчас основной язык это C#?

Volha
15.05.2017
16:00:29
ага

Roman
15.05.2017
16:00:50
Добро пожаловать!)

Volha
15.05.2017
16:00:55
спасибо :)

Sergey
15.05.2017
17:13:57
))

Volha
15.05.2017
17:15:31
:) викли привёл и сюда

Sergey
15.05.2017
17:17:46
я отправил ссылку куда только мог)

Алекс
15.05.2017
17:21:58

Igor
15.05.2017
17:22:49

Sergey
15.05.2017
17:39:07

Илья
15.05.2017
17:43:03
У меня такой пример и вопрос к нему.
let foo () =
// doing something
()
let foo2 () =
foo
foo
foo
()
Мне выдает варнинги на вызовы foo: The expression is a function value, i.e. is missing arguments. Its type is unit -> unit.
Как быть? Если поставить перед каждым вызовом ignore foo то варнинги пропадают. Но как-то не хочется везде игнор делать...

Google

Roman
15.05.2017
17:43:17

Илья
15.05.2017
17:44:59

Roman
15.05.2017
17:45:15

Илья
15.05.2017
17:45:23
аа понял

Ivan
15.05.2017
19:12:33
@sergey_tihon Есть какая нибудь инсайдерская информация о РЕАЛЬНО планируемых изменениях в C#, F#. Все ж вы там вроде поближе ?

Evgeniy
15.05.2017
19:13:15
Ivan Все планируемые изменения в F# обсуждаются на гитхабе.

Akhmed
15.05.2017
19:14:04

Ivan
15.05.2017
19:14:44
Не совсем. Есть решения которые приниманимаются без нас. Они выбираются из нашего пула, но их приоритет зависит от общего настроения оплачиваемых членов сообщества

Evgeniy
15.05.2017
19:15:14
Ivan Каких таких "оплачиваемых членов сообщества"?

Ivan
15.05.2017
19:15:28
Из Microsoft

Evgeniy
15.05.2017
19:15:32
Разработка F# целиком лежит на Сайме и опенсорс сообществе.

Ivan
15.05.2017
19:16:13
Сайм один мз самых влиятельных сотрудников Microsoft, как z gjybvf.
как я понимаю

Evgeniy
15.05.2017
19:16:32
Ivan И он все обсуждает на гитхабе.

Ivan
15.05.2017
19:17:09
Вот и интересно, как они строят взаимотношения внутри трех команд
Кто отвечает за что, и как это планируется. Ведь, я повторюсь, те же GADT обсуждаются в разных ветках сообщества - C#, F#, .NET CLR/ И похоже к решению, что что то делать надо, пришли все, но кто рискнет быть первым

Evgeniy
15.05.2017
19:19:21
.__.
Ivan Не, извини, F# стоит в стороне.