OCaml Sum function


Below is a non-tail-recursive function to compute the sum of a list of integers.

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

The last operation the function performs is the addition. Thus, the function isn't tail-recursive.

Below is a tail-recursive version of the same function.

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

Here, the aux function is tail-recursive: the last operation it performs is calling itself. As a consequence, the latter version of sum can be used with lists of any length.