求和函式

下面是一個非尾遞迴函式,用於計算整數列表的總和。

let rec sum = function
  | [] -> 0
  | h::t -> h + (sum t)

該函式執行的最後一個操作是新增。因此,該函式不是尾遞迴的。

下面是相同函式的尾遞迴版本。

let sum l =
  let rec aux acc = function
    | [] -> acc
    | h::t -> aux (acc+h) t
  in
  aux 0 l

這裡,aux 函式是尾遞迴的:它執行的最後一個操作是呼叫自身。因此,sum 的後一版本可以與任何長度的列表一起使用。