@Fsharp_chat

Страница 732 из 772
Roman
26.09.2018
20:53:55
let shift = 3 [|1;2;3|] |> Array.map ( fun x -> x +n)

Andrew
26.09.2018
20:54:03
Ну это да

Просто надо предусмотреть выход за границы

+ шифт в две стороны должен красиво работать (с отрицательным N)

Google
Vasily
26.09.2018
20:58:22
Задача какая?

Andrew
26.09.2018
21:01:24
Сдвинуть массив циклически, тоесть 0 1 2 3 При N = 1 превратить в 3 0 1 2 А при N = -2 в 2 3 0 1

Ivan
26.09.2018
21:03:19
Похоже циклический буффер на массиве. Изящно нельзя, можно грубо на unmanaged или IL. Будет быстро. Но ведь проще написать свою реализацию индексера с опорой на массив.

Andrew
26.09.2018
21:03:49
Это лаба в универ, тут важна не скорость, главное быстренько реализовать DES и пояснить что вообще происходит

Оптимизировать у меня задачи нет

Если б я хотел быстрее, я б пытался сделать на Си и жестко следил за памятью

Ivan
26.09.2018
21:04:50
Если выглядит как массив и интервейс как у массива - это массив?

Andrew
26.09.2018
21:05:22
Да



Т.к. в моем случае amount не будет больше 2

А массив четко будет 32 элемента

Ivan
26.09.2018
21:08:35
А вернуть IList не вариант?

Меня копирование напрягает

Google
Roman
26.09.2018
21:09:17
А почему бы Array.Copy не использовать?

Иногда процедурка лучше чем ФП)

Andrew
26.09.2018
21:09:39
А вернуть IList не вариант?
Ну там просто все на массивах

А если так?



Ivan
26.09.2018
21:12:19
Да массивы это болезнь дотнет (не только его). Реализацию IFixedVector превратили в единственную ыозможность.

Pavel
27.09.2018
03:18:24
Ну там просто все на массивах
let shift (xs:_[]) n = let n = if n >= 0 then n % xs.Length else xs.Length + n % xs.Length Array.concat [xs.[xs.Length - n..]; xs.[..xs.Length - n - 1]]

Friedrich
27.09.2018
06:18:41
Я спрашиваю при каждом вызове функции a будет заново создаваться, или это оптимизируется?
Да, будет создаваться. Если это нежелательно, можешь переписать код так: let func = let a = [1; 2; 3] fun b -> ...

В типах получится то же самое, а кэширование статических структур ты добавишь.

Andrew
27.09.2018
06:22:20
Спасибо)

Никос
27.09.2018
10:35:41
Это после статьи на хабре такое поток народа?)

Roman
27.09.2018
10:44:13
Ага

Bogdan
27.09.2018
13:40:22
Ага
А что за статья ?

Mikhael
27.09.2018
13:45:22
https://habr.com/post/424461/

вот эта полагаю

Bogdan
27.09.2018
17:59:13
возник вопрос, нашел пример класса: type MyClass = class new : intParam:int * strParam:string -> MyClass member Square : x:int -> int member Two : int end но VsCode ругается. Это проблема с VsCode ?

Google
Bogdan
27.09.2018
18:02:02
Это сигнатура класса, а не F# код.
ааа, а я думал алтернатива, читать нужно еще ?

Kinrany
27.09.2018
20:35:13
Есть хорошая причина, по которой много разных конструкций в F# используют кейворд type, а не отдельные слова?

Kinrany
27.09.2018
20:36:12
Классы?

Roman
27.09.2018
20:36:55
Обычно кейворд type обозначает работу с типами)

Создание и алиас. Вроде все

Kinrany
27.09.2018
20:39:26
Хотел сказать, что тогда по аналогии всё, что попадает в рантайм, тоже надо было бы объявлять с помощью одного и того же слова

Kinrany
27.09.2018
20:39:40
Но let именно это и делает, да?

Roman
27.09.2018
20:40:04
let это биндинг. Это наполнение. А type описывает структуру.

Kinrany
27.09.2018
20:40:10
И переменные, и функции, как минимум?

Roman
27.09.2018
20:40:22
Вопрос конечно интересный)

Ф-ции биндятся. На за регистрацию была от сообщества статья как раз. Ща скину. Про let

И переменные, и функции, как минимум?
https://m.habr.com/company/microsoft/blog/420039/

Kinrany
27.09.2018
20:42:11
Спасибо :)

Roman
27.09.2018
20:42:49
Явно описывает зачем нужен let) оно про рантайм, тут ты, скорее всего прав. А вот type это наверное больше про compile time

Anna
27.09.2018
20:42:56
В ML кстати разные слова. let для значений, fun для функций

Evgeniy
27.09.2018
20:43:26
Есть хорошая причина, по которой много разных конструкций в F# используют кейворд type, а не отдельные слова?
Просто автору языка нравится, когда ключевых слов немного. Например, для новых фич их стараются не добавлять, а использовать атрибуты.

Roman
27.09.2018
20:43:33
для compile time let тоже нужен
Да, ок. Это как датафлоу и контролфлоу

Google
Anna
27.09.2018
20:44:27
Kinrany
27.09.2018
20:57:55
Ох черт, автор статьи у меня пары вёл

Evgeniy
27.09.2018
20:58:51
Kinrany
27.09.2018
20:59:15
Действительно

Разница между let и type напомнила эзотерический Spiral: там автор хочет, чтобы типы были значениями, а ключевые слова использовать для различий между compile-time и run-time вычислениями

Evgeniy
28.09.2018
04:23:57
https://twitter.com/jorgefioranelli/status/1045451043096522752

Привет.

Klei
28.09.2018
10:57:00
Странно кстати, 20 человек за пару дней набежало и почти не приветствовали.

Johann
28.09.2018
12:01:45
Ok, всем ?

Artem
28.09.2018
12:26:21
Привет всем)))

Evgeniy
28.09.2018
15:24:45
Пожалуйте.

Andrey
28.09.2018
15:34:09
Спасибо. Извините был без приветствия. Всем привет)

Vlad
28.09.2018
16:40:11
https://github.com/fsharp/fslang-suggestions/issues/698

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