
Vasily
19.05.2017
16:05:59
А, хотя норм
let rec parse arr acc =
match arr with
|x when x|>Seq.isEmpty->acc
|x ->let hd=x|>Seq.head
let tl=x|>Seq.tail
if(hd=0) then 0 else match hd,acc with
|x,0->parse tl x
|x,y when Math.Abs(x)=Math.Abs(y)->if(x>y) then x else y
|x,y->parse tl (Math.Min(Math.Abs(acc),Math.Abs(x)))

Akhmed
19.05.2017
16:06:43
ну вот это уже лучше )

Vasily
19.05.2017
16:31:27
В целом, задача на самом деле на потоки событий

Google

Roman
19.05.2017
16:57:32

Akhmed
19.05.2017
16:58:23
жестко )

Roman
19.05.2017
16:59:55

Akhmed
19.05.2017
17:00:10
ну я бы быстро не сделал бы такое решение )

Roman
19.05.2017
17:04:46
ну я бы быстро не сделал бы такое решение )
Я вспоминал станадртную библиотеку довольно долго, ну и по сравнению с возможностью выйти из циклической операции, тут все же делается одна лишняя итерация, из-за того, что takeWhile (fun x-> x <> 0) почему-то не возвращает само значение 0, а мне не хочтелось описывать свою ф-цию)
почему в стандартной библиотеке нет takeUntil?

Evgeniy
19.05.2017
17:35:06
http://fable.io/blog/How-Fable-Helped-Kids.html

Roman
19.05.2017
17:37:36

Evgeniy
19.05.2017
17:38:05
Хочу на выходных попробовать на Fable что-нибудь написать.

Roman
19.05.2017
17:39:55
А правильно я понимаю, что тайппровадеры в рантайме уже не проверяют типы и тд? Только при компиляции

Pavel
19.05.2017
18:04:44

Roman
19.05.2017
18:08:17
А, Дмитрий же в питере сейчас. )

Google

Roman
19.05.2017
18:08:28
У вас там минимитап?)

Pavel
19.05.2017
18:35:32
#dotnext жи

Roman
19.05.2017
18:58:26
Ааа. Интересно к нам оттуда придёт кто-нибудь

Kirill
19.05.2017
19:28:14
Подскажите, кто делал, как у вас выглядит fsproj под netstandard? У меня нагеты не видит

Nikolay
19.05.2017
19:30:29

Kirill
19.05.2017
19:31:29
спасибо, плохо только, что у меня так же

Nikolay
19.05.2017
20:42:00
dotnet restore не работает?

Kirill
19.05.2017
20:43:37
не совсем: рестор работает, нагеты загружаются, но ни ионид, ни студия не видят нэймспейсов

Nikolay
19.05.2017
20:46:06

Kirill
19.05.2017
20:46:27
у меня превью 15.3

Nikolay
19.05.2017
20:47:06
А у тебя файлы добавлены?
В проект
Compile

Kirill
19.05.2017
20:48:12
что ты имеешь ввиду?

Nikolay
19.05.2017
20:48:54
Ну посмотри мой код
<ItemGroup>
<Compile Include="Http.fs" />
</ItemGroup>

Kirill
19.05.2017
20:49:30
да, уже увидел

Nikolay
19.05.2017
20:49:56
Такое есть у тебя с твоим файлом?

Kirill
19.05.2017
20:54:48
нет, проглядел это. сейчас добавил, теперь билд проходит, но ошибку всё равно пишет

Google

Kirill
19.05.2017
20:55:33
спасибо
попробую перенести весь проект и посмотрю тогда, заработает ли на самом деле или нет

Roman
19.05.2017
21:07:56
Привет!

Вольдемар
19.05.2017
21:08:18
Привет)

Roman
19.05.2017
22:30:28
https://github.com/ionide/ionide-web внезапно

k0balt
19.05.2017
22:52:57
а зачем?


Friedrich
20.05.2017
04:36:49
Ваше вчерашнее обсуждение про температуру интересное, спасибо.
У меня тоже такая задачка есть, но чуть сложнее. У меня есть программа, которая чистит временный каталог. Ей можно отправлять запросы типа "освободи 100 МБ места, начиная с самых старых файлов".
Соответственно, я для этого нахожу сумму объёмов всех записей во временном каталоге до тех пор, пока она не превысит размер в 100 МБ.
"Найти объём места, которое освободится на диске при удалении записи" — это дорогая операция (потому что она лезет на диск, да к тому же там рекурсивная функция для каталогов, а для корректной работы со сжатыми файлами приходится лезть в интероп с Win32 API), так что ленивое прерывание задачи после того, как набралось больше 100 МБ, в данной задаче критично.
В итоге сейчас я сделал императивное решение с прерыванием, потому что красивое чистое решение сделать не смог. Кажется, хаскельные кондуиты должны элегантно решать эту задачу, но реализации кондуитов для F# я пока не видел.
Кто-нибудь в этих кондуитах разбирается? Поможете спроектировать красивое чисто функциональное решение?


Pavel
20.05.2017
05:02:21
У меня тоже такая задачка есть, но чуть сложнее. У меня есть программа, которая чистит временный каталог. Ей можно отправлять запросы типа "освободи 100 МБ места, начиная с самых старых файлов".
Соответственно, я для этого нахожу сумму объёмов всех записей во временном каталоге до тех пор, пока она не превысит размер в 100 МБ.
"Найти объём места, которое освободится на диске при удалении записи" — это дорогая операция (потому что она лезет на диск, да к тому же там рекурсивная функция для каталогов, а для корректной работы со сжатыми файлами приходится лезть в интероп с Win32 API), так что ленивое прерывание задачи после того, как набралось больше 100 МБ, в данной задаче критично.
В итоге сейчас я сделал императивное решение с прерыванием, потому что красивое чистое решение сделать не смог. Кажется, хаскельные кондуиты должны элегантно решать эту задачу, но реализации кондуитов для F# я пока не видел.
Я писал похожее. Писал в базу с буфером на диске (база лежала иногда).
Писал комбинатор для hopac stream - но у меня было проще, я мог количество файлов прикинуть
Наверное можно его модифицировать и передавать не количество параметром, а функцию.


Klei
20.05.2017
05:50:09


Илья
20.05.2017
07:34:56
в vscode с ionide возможно сделать какие то кнопки или бинды чтобы билдить / запускать проект автоматически? знаю знаю надо написать что-то вроде msbuild project, но каждый раз так делать довольно муторно, как-то уже привык что в нормальных IDE все билдится и запускается по одной кнопочке...

Roman
20.05.2017
07:37:08
если нет dotnet cli, то watch по моему был в тасках у VSCode

Илья
20.05.2017
07:37:54

Roman
20.05.2017
07:38:26
https://github.com/aspnet/DotNetTools
https://github.com/aspnet/DotNetTools/tree/dev/src/Microsoft.DotNet.Watcher.Tools конкретнее

Google

Летучая
20.05.2017
07:39:34

Roman
20.05.2017
07:39:43
но там очень старый fable, еще версии 0.1.*

Илья
20.05.2017
07:42:34

Roman
20.05.2017
07:43:15

Илья
20.05.2017
07:43:33

Roman
20.05.2017
07:43:44

Илья
20.05.2017
07:43:49

Roman
20.05.2017
07:43:59
и dotnet cli не устанавливается?

Admin
ERROR: S client not available

Илья
20.05.2017
07:44:03
да

Roman
20.05.2017
07:44:09
тогда печально

Илья
20.05.2017
07:44:09
.net core на арч не пашет
юзаю моно

Roman
20.05.2017
07:44:35
да, core может и не пахать, но сама утилита есть?
там можно и из нее моно юзать

Илья
20.05.2017
07:44:49
она не ставится без кора

Roman
20.05.2017
07:44:53
ок
тогда пока никак, вариант написать fake скрипт
там есть watch

Google

Илья
20.05.2017
07:45:28
fake скрипт?

Roman
20.05.2017
07:45:31
ага, ща

Илья
20.05.2017
07:45:31
что это?

Roman
20.05.2017
07:45:50
http://fsharp.github.io/FAKE/

Летучая
20.05.2017
07:45:59
компилятор фш

Roman
20.05.2017
07:46:00
http://fsharp.github.io/FAKE/watch.html

Илья
20.05.2017
07:46:33
Но это типа тоже надо будет руками писать каждый раз какую-то команду? В чем тогда фишка?))

Roman
20.05.2017
07:46:45

Илья
20.05.2017
07:46:50

Roman
20.05.2017
07:47:09
какую команду каждый раз? Не понятно

Илья
20.05.2017
07:47:23
очевидно же

Roman
20.05.2017
07:48:50
запускаешь один раз как-нибудь типа 'build watchMyTask' и на каждое изменение файлов, которые ты ккажешь у тебя может запускаться все что захочешь хоть тесты, хоть exe-шник ты только к нему дебагер при аттач и не надо каждый раз вводить команду
я тебе скинул ссылку на watch
для FAKE

Илья
20.05.2017
07:49:36

Roman
20.05.2017
07:49:49
это для dotnet cli не работает

Летучая
20.05.2017
07:50:01
Зочем ставить линух, если ты хочешь на кнопки давить, а не командную строку пользовать

Roman
20.05.2017
07:51:04
let generateDocs() =
tracefn "Generating docs."
Target "GenerateDocs" (fun _ ->
generateDocs()
)
Target "Watch" (fun _ ->
use watcher = !! "docs/**/*.*" |> WatchChanges (fun changes ->
tracefn "%A" changes
generateDocs()
)
System.Console.ReadLine() |> ignore //Needed to keep FAKE from exiting
watcher.Dispose() // Use to stop the watch from elsewhere, ie another task.
)
> build Watch
все