Size: a a a

2021 March 13

ЕБ

Евгений Бурмистров... in F# Chat
бодрое утро, как мне понять когда хвостовая рекурсия разворачивается в дебаге, а когда нет?
вот примеры:
так даже в дебаге разворачивает у меня

let listMap func input =
   let rec listMapRevTailRec acc =
       function
       | head :: tail -> listMapRevTailRec (func head :: acc) tail
       | [] -> []

   listMapRevTailRec [] input |> List.rev


а вот так вот - в дебаге SO, а dotnet test -c Release всё ок
let listMap func input =
   let cons h t = h :: t
   let rec listMapTailRec acc =
       function
       | head :: tail -> listMapTailRec (cons (func head) >> acc) tail
       | [] -> acc []

   listMapTailRec id input
источник

I

IdiocyAcceptance in F# Chat
Как это понять "чуйкой" - хз. Но первый твой вариант просто разворачивается в цикл, не в хвостовую рекурсию. Вот на "чуйке" тебе говорю
источник

I

IdiocyAcceptance in F# Chat
Отсюда и работа в дебгае
источник

I

IdiocyAcceptance in F# Chat
Ты можешь у себя в библоитеке юзать <UseTailCalls> true </UsertailCalls> в свойствах билда
источник

I

IdiocyAcceptance in F# Chat
А так по умолчанию хвостовая рекурсия есть только в релизе
источник

I

IdiocyAcceptance in F# Chat
У меня так же с асинками - я вот хз когда оно будет оптимизировано, а когда нет
источник

I

IdiocyAcceptance in F# Chat
Надо бы поизучать.
источник

AK

Alexandr Krotov in F# Chat
А я могу как-то взять номер строки кода что бы отправить его в лог?
источник

I

IdiocyAcceptance in F# Chat
Ток если ручками сделаешь механизм
источник

I

IdiocyAcceptance in F# Chat
А из коробки нет, да и зачем?
источник

I

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

I

IdiocyAcceptance in F# Chat
Вероятно тебе такое будет полезно, но я сам не проверял как оно в эфшурпе работает
источник

I

IdiocyAcceptance in F# Chat
Мб никак.
источник

AK

Alexandr Krotov in F# Chat
источник

AK

Alexandr Krotov in F# Chat
для f# так
источник

I

IdiocyAcceptance in F# Chat
Ну, те же самые по идее
источник

I

IdiocyAcceptance in F# Chat
Ток ещё обмазать доп. аттрибутами
источник

AK

Alexandr Krotov in F# Chat
та оно работает
источник

AK

Alexandr Krotov in F# Chat
я просто хочу в лог максимум инфы затолкать😁
источник

ЕБ

Евгений Бурмистров... in F# Chat
IdiocyAcceptance
Как это понять "чуйкой" - хз. Но первый твой вариант просто разворачивается в цикл, не в хвостовую рекурсию. Вот на "чуйке" тебе говорю
ничего не понятно, но крайне интересно :)
<UseTailCalls>true</UseTailCalls> не помогло, кстати, зафорсить в дебаге тейлкол
источник