Подскажите плз по F# Пробую пример с правосторонней разверткой списка. let a=1L; let b=1000000L; let list=[a..b]; let fold_right func acc list = let rec loop list cont = //сюда мы передаем текущую функцию континуации match list with |[] -> cont acc //а вот и наше ключевое вычисление. |head::tail -> loop tail (fun racc -> cont (func head racc)) loop list (fun x -> x) let reverse = fold_right(fun _ acc -> acc + 1) 0 let sl=reverse(list); System.Console.Write(sl); System.Console.Read(); но поечему то вылетает с переполненеим стека, хотя такой код вреод как должне решить проблемы переполнен стека (взял тсюуда [url]http://habrahabr.ru/post/57503/[/url]) подскажите плз, где грабли? |
Чтобы получить хвостовую рекурсию вычисляемое выражение должно быть последним. Если после вычисляемого выражения будет хоть что-то - компилятор не сможет это оптимизировать без использования стека. |
Текущее время: 16:45. Часовой пояс GMT +3. |