Size: a a a

2021 January 05

VL

Vladimir Lozhnikov in F# Chat
и есть у меня какое то смутное впечатление, что сюда можно вычисляемые выражения впихнуть вместо такой сложной конструкции. правильно мыслю?
источник

O

Ortofax in F# Chat
ты передаёшь в функцию, что ей нужно будет сделать с её результатом/результатами
источник

I

IdiocyAcceptance in F# Chat
вычисляемые выражения насколько я знаю не могут быть tail-call оптимизированы
источник

AH

Ayrat Hudaygulov in F# Chat
Vladimir Lozhnikov
да, это сам принцип хвостовой рекурсии. он понятен. мне не понятна вот эта часть.

sizeCont treeLeft (fun leftSize ->
           sizeCont treeRight (fun rightSize ->
               cont (leftSize + rightSize))

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

В континуейшнее мы довычисляем правое сабдерево и передаем континуейшн чтобы вычислить окончательно сумму длин левого и правого сабдерева
источник

I

IdiocyAcceptance in F# Chat
слишком сложно и много кода под капотом
источник

AH

Ayrat Hudaygulov in F# Chat
это все будет оптимизировано с тейлколами
источник

O

Ortofax in F# Chat
IdiocyAcceptance
вычисляемые выражения насколько я знаю не могут быть tail-call оптимизированы
разве на них нельзя использовать монаду Cont?
источник

VL

Vladimir Lozhnikov in F# Chat
Ayrat Hudaygulov
ну смотри, мы рекурсивно (в последней позициии) вычисляем длину левого сабдерева, и передаем туда континуейшн
рекурсия здесь хвостовая

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

VL

Vladimir Lozhnikov in F# Chat
но под дебагом нужно будет погонять
источник

I

IdiocyAcceptance in F# Chat
Ortofax
разве на них нельзя использовать монаду Cont?
Хз.
источник

AH

Ayrat Hudaygulov in F# Chat
Vladimir Lozhnikov
но под дебагом нужно будет погонять
в дебаге если чо тейл колл оптимизации не работают
источник

AH

Ayrat Hudaygulov in F# Chat
но это и неважно
источник

I

IdiocyAcceptance in F# Chat
Ну если лист не бесконечный, то не беда
источник

AH

Ayrat Hudaygulov in F# Chat
ну да
источник

VL

Vladimir Lozhnikov in F# Chat
а зачем тут вообще cont? эта функция возвращает то, что ей передают. без нее не будет работать? если просто использовать

вместо

cont (leftSize + rightSize)

просто

(leftSize + rightSize)
источник

AH

Ayrat Hudaygulov in F# Chat
Vladimir Lozhnikov
а зачем тут вообще cont? эта функция возвращает то, что ей передают. без нее не будет работать? если просто использовать

вместо

cont (leftSize + rightSize)

просто

(leftSize + rightSize)
так там 3 континуейшна
источник

VL

Vladimir Lozhnikov in F# Chat
а, точно
источник

AH

Ayrat Hudaygulov in F# Chat
первый
fun leftSize ->
   sizeCont treeRight (fun rightSize -> ... )

второй

fun rightSize ->
   cont (leftSize + rightSize))

третий

(fun x -> x)
источник

I

IdiocyAcceptance in F# Chat
Что-то потерял @gsomix
источник

I

IdiocyAcceptance in F# Chat
источник