Почему этот хвост -не рекурсивен?

Я работаю над книгой Real -World Functional Programming , и я попытался придумать свой собственный пример хвостовой рекурсии, прежде чем читать пример книги (, листинг 10.2, с. 265 ). Пример книги работает; мой вызывает переполнение стека.

Я обнаружил, что если я использую аргумент кортежа или предварительно -вычисляю a + accum, то мой будет работать. Я хочу понять, почему.

let rnd = new System.Random()
let test2 = List.init 1000000 (fun _ -> rnd.Next(-50, 51))

let rec sum2 list accum =
  match list with
  | [] -> accum
  | a::b -> sum2 b a + accum

let result = sum2 test2 0

printfn "%d" result

5
задан Dmitrii Lobanov 17 February 2012 в 07:09
поделиться