
Nikolay
24.05.2017
17:00:48

Roman
24.05.2017
17:01:28

Pavel
24.05.2017
17:05:16
Хвостовая рекурсия - одна из причин отсутствия поддержки f# в. Net native

Nikolay
24.05.2017
17:05:27
https://stackoverflow.com/a/29571052

Google

Nikolay
24.05.2017
17:05:31
Вот
Короче, C# может в хвостовую рекурсию, если сильно захочет

Pavel
24.05.2017
17:06:34
На сколько я помню Roslyn с этим справляется

alix
24.05.2017
17:07:02

Roman
24.05.2017
17:07:12

alix
24.05.2017
17:07:13
насколько я помню она оптимайзится в цикл

Roman
24.05.2017
17:07:26

Nikolay
24.05.2017
17:07:57

alix
24.05.2017
17:08:22
проблемесы?

Roman
24.05.2017
17:08:39
но зачем
Локаничность, есть действительно некоторые вещи, которые сразу представляются в виде цикла, а есть задачи, решение которых именно рекурсивно
проблемесы?
да. Я не хочу мучать мозг и пытаться приветси все к циклу, когда я могу описать задачу рекурсивно.

Nikolay
24.05.2017
17:09:45
Обход дерева рекурсией выглядит лаконично

Google

alix
24.05.2017
17:09:49
не мучай мозг)

Roman
24.05.2017
17:10:50
Вот с одной стороны звучит как хороший лозунг, но вот контекст...

Nikolay
24.05.2017
17:12:18
А почему они не сделают нормальную хвостовую рекурсию, раз CLR её уже поддерживает?

Alexey
24.05.2017
17:13:27

alix
24.05.2017
17:13:40

Roman
24.05.2017
17:18:26

alix
24.05.2017
17:18:40
обход в ширину или в глубину?

Roman
24.05.2017
17:26:45
код можешь написать?
кончено могу, если тебе не надо ничего возвращать, а найти и применить с сайдэффектом, то можно хвостовой рекурсией

alix
24.05.2017
17:29:03
то есть учитывая что нужно внутри функции сделать n вызовов в зависимости от числа листьев? все равно будет хвостовая рекурсия?
я б посмотрел как это без стека работает

Alexey
24.05.2017
17:36:06
Модераторы быстрого реагирования

Klei
24.05.2017
18:14:34

Roman
24.05.2017
18:15:11
type Tree =
| Leaf of int
| Node of Tree * Tree
let rec code (f: int -> unit) (tree:Tree) =
match tree with
| Leaf x -> f x
| Node(t1,t2) ->
code f t1
code f t2
let makeTree n =
let rec createTree i tree =
if i = n then
tree
else
Node(Leaf(i), tree) |> createTree (i + 1)
Leaf(10000001) |> createTree 0
[<EntryPoint>]
let main argv =
let t = makeTree 1000000
code (printfn "%i") t
System.Console.ReadKey() |> ignore
0

alix
24.05.2017
18:19:05
элемент дерева точнее

Roman
24.05.2017
18:19:53

Google

Nikolay
24.05.2017
18:20:19
Круто :)

alix
24.05.2017
18:20:25
ну а если будет просто node?

Roman
24.05.2017
18:20:49

Nikolay
24.05.2017
18:20:51
@neftedollar а если пометить как [<Struct>]

alix
24.05.2017
18:20:55
и там тож были или leaf или branch

Roman
24.05.2017
18:23:54

alix
24.05.2017
18:23:59
и в узлах значения

Nikolay
24.05.2017
18:24:14
Как написать функционально такой кусок:
let a = JsonConvert.DeserializeObject<Types.ApiResponse<'a>>(str, jsonOpts)
if a.Ok then
a.Result
else
failwith("Error")

Roman
24.05.2017
18:24:17

Nikolay
24.05.2017
18:25:11

Roman
24.05.2017
18:25:19
если ошибки там это нормально

Nikolay
24.05.2017
18:26:15
Нормально использовать failwith при ошибке?

Roman
24.05.2017
18:28:03

Nikolay
24.05.2017
18:29:07

Google

Roman
24.05.2017
18:29:31

alix
24.05.2017
18:30:50
блин я все равно не понимаю как если бы узлы были однородные и со значениями внутри выполнить поиск в глубину например хвостовой рекурсией)

Admin
ERROR: S client not available

Nikolay
24.05.2017
18:30:55
Result интересно выглядит

alix
24.05.2017
18:31:04
там по любому нужен стек будет

Roman
24.05.2017
18:33:07

Evgeniy
24.05.2017
18:33:29
Ну как минимум в случае бинарного дерева используются продолжения. Примеры есть в курсах Сошникова.

Nikolay
24.05.2017
18:40:04
Нашёл такой пример на msdn:
let private tryParseWith tryParseFunc (s : string) =
match (tryParseFunc s) with
| true, x -> Ok x
| false, _ -> Error ("%s is not capable of being parsed." s)
Но ругается на строку Error ...: This value is not a function and cannot be applied

Klei
24.05.2017
18:44:18

Nikolay
24.05.2017
18:44:43
Я думал это фитча Error :)

Evgeniy
24.05.2017
19:06:31
@irrationality https://gist.github.com/gsomix/520a7c3d5a74c0cf0a5e14442a123531

Nikolay
24.05.2017
19:48:35
https://gist.github.com/Dolfik1/81e376988747fe915d095d2962e0c131
Не пойму в чём косяк
IdiomaticDuConverter не умеет вложенности конвертить?
Ошибка на 91 строке:
System.InvalidCastException occurred
HResult=0x80004002
Message=Недопустимое приведение "System.Int64" к "Program+Types+User".
Source=mscorlib
StackTrace:
at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
at System.Int64.System.IConvertible.ToType(Type type, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType)

alix
24.05.2017
19:58:48

Roman
24.05.2017
22:44:56
Может нам как сообществу принести пользу и собрать в одном месте биндинги fable?

Evgeniy
25.05.2017
04:51:27
Что у тебя работает неправильно?
Угу, через Ж всё работает

Nikolay
25.05.2017
06:28:08

Google

Evgeniy
25.05.2017
06:28:24
Да.

Nikolay
25.05.2017
06:30:19
У меня вчера автодополнение чудило
И просвечивало ошибки, которых не было
И меня это выбесило :)
В VS15 такой херни не было

Max
25.05.2017
06:34:49

Evgeniy
25.05.2017
06:35:51
@Dolfik VF# Nightly?
Ишшью завел?

Nikolay
25.05.2017
06:38:03
Вроде ничего не стоит
Я хз как воспроизвести, просто перезапустил студию, стало ок

Evgeniy
25.05.2017
06:39:56
Кажется, проблема не катастрофическая.

Nikolay
25.05.2017
06:40:33
Но всё равно печально
И ещё печально, что powertools нет