@Fsharp_chat

Страница 746 из 772
Ayrat
08.10.2018
18:25:13
забыл забыл

Grigoriy
08.10.2018
18:25:22
А шо его поднимать то? .net есть и f# есть
да мы тока вчера научились fsi от коры запускать :)))

Ayrat
08.10.2018
18:25:49
Ну один хер, билд скрипт для баша тоже чужеродно в виндовс окружении будет смотреться

Anton
08.10.2018
18:26:07
Google
Anton
08.10.2018
18:26:13
на венде

)

Anatoly
08.10.2018
18:26:55
mingw лучше

Ayrat
08.10.2018
18:27:04
через Cygwin
таких бы умельцев я бы тоже послал PowerShell изучать!

Anatoly
08.10.2018
18:27:05
всё равно с git bash ставится, на винду.

Anton
08.10.2018
18:27:38
хз зачем костылять баш, если есть дотнет с fsi

В общем, моя маленькая инициатива под шумок пропихнуть в компанию F# провалилась с треском. Буду искать другой повод хД

Ayrat
08.10.2018
18:29:27
хз зачем костылять баш, если есть дотнет с fsi
Вопрос в том кто будет поддерживать билд скрипты если репка на F# и билд скрипт на F#, то условному мейнтейнеру не придётся изучать brainfuck/PS/cmd/bash/яхзчтоещё Ему нужен будет только F# - это лучший кейс для Fake и иже с ними А вот если ты билд скрипт на F# просто ради F# делаешь чтобы потом втюхать его еникейщикам на сапорте - то это плохой план

Владислав
08.10.2018
18:30:38
Обнимемся? :))))
:D я может тоже с вами потом буду)

Google
Ayrat
08.10.2018
18:31:25
ну так-то fake без dotnet tools тоже через cmd/bash скрипт запускать надо)

Grigoriy
08.10.2018
18:32:03
в FAKE есть бутстрап .cmd

Anatoly
08.10.2018
18:47:32
(извинити) https://i.redd.it/k8l9vp5wozq11.jpg

Vasily
08.10.2018
19:25:16
(извинити) https://i.redd.it/k8l9vp5wozq11.jpg
Ну это про хаскель больше

Grigoriy
09.10.2018
02:06:39
Привет!

Roman
09.10.2018
07:09:56
let inline score p l = let divider = ((pown (p-l) 2) + 1) |> float32 (p*l)/sqrt divider let s = score 1 2 //error let s1 = score 1 2.0f //error Дает ошибку The type 'float32' does not match the type 'int32' Внимание вопрос: валера, какого хера?

Григорий
09.10.2018
07:19:44
перегрузок функций же в F# нету,

Roman
09.10.2018
07:24:04
Ты плохо сформулировал вопрос.
функцию невозможно вызвать. Что ни передай во второй аргумент (инт или флоат), компилятор ругается, что не флоат != инт

функция компилится, а вызвать никак

Evgeniy
09.10.2018
07:24:18
Компилируется, потому что она обобщенная по арифметическим операторам. Но нужных тебе операторов (чтобы умножать или делить int на float) просто нет.

Roman
09.10.2018
07:28:04
хм, типа все надо привести к флоату?

Evgeniy
09.10.2018
07:28:15
Да.

В F# вся арифметика строгая.

Нужно явно конвертировать значения.

Roman
09.10.2018
07:28:57
ок спс

Andrew
09.10.2018
07:29:11
Google
Ayrat
09.10.2018
07:30:02
кстати, а почему?
чтобы нельзя было имплиситно привести флоаты к интам или обратно и сделать херню

Andrew
09.10.2018
07:30:29
чтобы нельзя было имплиситно привести флоаты к интам или обратно и сделать херню
какая херня может быть в том, чтобы неявно расширять числовой тип?

Ayrat
09.10.2018
07:31:34
ну это из той же серии про боксинг. в F# надо ЯВНО упаковывать стракты там где требуется обжект или где компилятор думает что может прилететь любой тип, а ты матчишь с референсом, он потребует явный боксинг от тебя

Andrew
09.10.2018
07:31:37
видимо дело в том, что типы выводятся автоматически и такое поведение может иметь неожиданные последствия

Roman
09.10.2018
07:31:37
let inline score p l = let p = float p let l = float l let divider = ((pown (p-l) 2) + 1.0) (p*l)/sqrt divider вызывается успешно с любыми числовыми типами)

Ayrat
09.10.2018
07:33:20
видимо дело в том, что типы выводятся автоматически и такое поведение может иметь неожиданные последствия
кстати про вывод типов. По алгоритму тайп инфиренса должен выводится наиболее общий тип. Т.е. любой для начала, а потом навешиваем констрейны. Флоат является более общим типом к инту, поэтому если бы не костыли - мы бы везде в ФП языках использовали числа с плавающей точкой

матан говорит что действительные числа надмножество целых, но матан не в курсе что действительные числа тяжело отображать корректно без потери точности в компах

Ayrat
09.10.2018
07:35:36
а вот например let sum a b = a + b должен выводится флоат, да

т.к. он более общий. В фшарпе выводится инт

Roman
09.10.2018
07:36:38
или decimal?

Ayrat
09.10.2018
07:37:00
да хз, это уже мелочи жизни) хорошо что для чисел нет сабтайпинга!!

вот была бы хохма

Andrew
09.10.2018
07:37:19
а вот например let sum a b = a + b должен выводится флоат, да
а вот это сложный момент, т.к. int тут настолько же частный случай, как и float

Ayrat
09.10.2018
07:37:32
Anna
09.10.2018
07:37:34
т.к. он более общий. В фшарпе выводится инт
строго говоря, там что угодно может вывестись, если ты вызовешь рядом этот sum. Вызовешь со строками - выведет строки. Это упоротая штука

Roman
09.10.2018
07:37:45
а вот это сложный момент, т.к. int тут настолько же частный случай, как и float
флоат позволяет больше операций, чем инт. Так что он более общий

Ayrat
09.10.2018
07:38:08
Google
Ayrat
09.10.2018
07:38:21
ну типа складывай что хочешь где определён (+), компилятор по месту разберётся

Anna
09.10.2018
07:38:37
Andrew
09.10.2018
07:38:47
я про то, что для человека без предварительного знания выбор int для данного случая настолько же неожиданный, насколько был бы float

Anna
09.10.2018
07:39:02
Roman
09.10.2018
07:39:19
я вот тоже сижу и думаю, но все равно что-то не сходится

Bonart
09.10.2018
07:39:49
Anna
09.10.2018
07:40:05
Но всё равно мне кажется опасно вводить отношение подтипизации для целых и дробных. Надо общий тип над теми и другими

Andrew
09.10.2018
07:40:16
я бы ожидал от такой конструкции что-то типа T sum<T>(T a, Tb) => a + b

Anna
09.10.2018
07:40:20
там какой-нить Number обычно делают

Evgeniy
09.10.2018
07:40:38
После C# - наоборот :)
Вывод типов в F# позволяет ошибкам уходить очень далеко от места их возникновения.

Ayrat
09.10.2018
07:41:08
Но всё равно мне кажется опасно вводить отношение подтипизации для целых и дробных. Надо общий тип над теми и другими
Опасно потому что компутер не умеет в бесконечную точность. Матан-то умеет поэтому там чётко - множество натуральных => множество целых => действительные => мнимые, ну там ещё по вкусу докиньте

Bonart
09.10.2018
07:41:51
Вывод типов в F# позволяет ошибкам уходить очень далеко от места их возникновения.
Есть такое. А в C# приходится яростно костылить чтобы его вывод типов не заставил тебя писать многоэтажное ручками

Anton
09.10.2018
07:42:49
с чего это вдруг?

Evgeniy
09.10.2018
07:43:04
с чего это вдруг?
Я объяснил.

Andrew
09.10.2018
07:44:06
Вывод типов в F# позволяет ошибкам уходить очень далеко от места их возникновения.
Да, согласен. Когда есть явный интерфейс, сразу понятно, кто ошибся - вызвающая сторона или реализующая

Google
Evgeniy
09.10.2018
08:08:53
Да, согласен. Когда есть явный интерфейс, сразу понятно, кто ошибся - вызвающая сторона или реализующая
Многие еще ленятся явно аннотировать типы, потому что IDE подсказывает (тултипы, code lenses).

Andrew
09.10.2018
08:29:27
Строгая типизация
Расширение числовых типов по идее не нарушает строгость типизации

Pavel
09.10.2018
08:36:03
Andrew
09.10.2018
08:54:54
decimal (System.Math.Pow(2., 63.)) <> decimal (pown 2UL 63)
Хмм, ты прав, про такой кейс я не подумал

Хотя запрещать ради него все числовые преобразования мне все равно кажется непрактичным

Anton
09.10.2018
08:55:42
Pavel
09.10.2018
09:41:43
Почему не 2.**63. ?
а разница то?

Anton
09.10.2018
09:41:52
а разница то?
красивее жи

меньше букв

Andrew
09.10.2018
09:52:01
красивее жи
Имхо опускать нулевую часть дробного числа с любой стороны от точки абсолютно нечитаемо

Александр
09.10.2018
12:05:51
Формулы никогда нечитаемы

И тем лучше, чем меньше места они занимают

Paul
09.10.2018
12:11:00
Всем привет! Скажите пожалуйста: почему элементы в массиве mutable, а в списке нет?

Siarhei
09.10.2018
12:13:17
Почему не 2.**63. ?
а в некоторый языках .* это будет значит матричное умножение

Страница 746 из 772