Sto lavorando al libro Real-World Functional Programming e ho cercato di trovare il mio esempio di ricorsione della coda prima di leggere l'esempio del libro (elenco 10.2, pagina 265). L'esempio del libro funziona; la mia causa uno stack overflow.Perché questa coda non è ricorsiva?
Ho trovato se utilizzo un argomento di tupla o pre-calcolare a + accum
quindi il mio funzionerà. Voglio capire perché.
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
Aaargh! Tu e @ sepp2k siete chiari. È l'ordine di valutazione. Le parentesi la risolvono. – TrueWill
Di solito sovrasascalizzo tutto, poiché ho scoperto che è il male minore. Yay comune lisp !!! – gpeche