Tôi đang làm việc qua cuốn sách Real-World Functional Programming và tôi đã cố gắng đưa ra ví dụ về việc đệ quy đuôi của riêng tôi trước khi đọc ví dụ của sách (liệt kê 10.2, trang 265). Ví dụ của cuốn sách hoạt động; mỏ gây ra tràn ngăn xếp.Tại sao đuôi này không đệ quy?
Tôi đã tìm thấy nếu tôi sử dụng đối số tuple hoặc tính trước a + accum
thì sẽ hoạt động. Tôi muốn hiểu tại sao.
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! Bạn và @ sepp2k được phát hiện tại chỗ. Đó là thứ tự đánh giá. Các dấu ngoặc đơn sửa chữa nó. – TrueWill
Tôi thường over-parenthesize tất cả mọi thứ, như tôi đã tìm thấy nó là cái ác ít hơn. Yay phổ biến lisp !!! – gpeche