Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Подскажите плз по F# (http://forums.kuban.ru/f1024/podskazhite_plz_po_f-3835154.html)

megabax 08.03.2013 19:31

Подскажите плз по 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])
подскажите плз, где грабли?

BTR 21.03.2013 11:46

Чтобы получить хвостовую рекурсию вычисляемое выражение должно быть последним. Если после вычисляемого выражения будет хоть что-то - компилятор не сможет это оптимизировать без использования стека.


Текущее время: 17:02. Часовой пояс GMT +3.