計算列表中數字的總和

通過遞迴

let rec sumTotal list = 
    match list with
    | [] -> 0 // empty list -> return 0
    | head::tail -> head + sumTotal tail

上面的例子說:“看看 list,它是空的嗎?返回 0.否則它是一個非空列表。所以它可能是 [1][1; 2],[1; 2; 3]等。如果 listis [1]那麼將變數 head 繫結到 1,將 tail 繫結到 [],然後執行 head + sumTotal tail

執行示例:

sumTotal [1; 2; 3]
// head -> 1, tail -> [2; 3]
1 + sumTotal [2; 3]
1 + (2 + sumTotal [3])
1 + (2 + (3 + sumTotal [])) // sumTotal [] is defined to be 0, recursion stops here
1 + (2 + (3 + 0)))
1 + (2 + 3)
1 + 5 
6

封裝上述模式的更一般方法是使用功能性摺疊! sumTotal 變成了這個:

let sumTotal list = List.fold (+) 0 list