我在探索OCaml函數的「高級」用法,我想知道如何使用可變數量的參數編寫函數。OCaml函數具有可變數量的參數
例如,像一個函數:
let sum x1,x2,x3,.....,xn = x1+x2,+x3....+xn
我在探索OCaml函數的「高級」用法,我想知道如何使用可變數量的參數編寫函數。OCaml函數具有可變數量的參數
例如,像一個函數:
let sum x1,x2,x3,.....,xn = x1+x2,+x3....+xn
帶着幾分型兩輪牛車的,肯定的:
let sum f = f 0
let arg x acc g = g (acc + x)
let z a = a
而且( ab)用法:
# sum z;;
- : int = 0
# sum (arg 1) z;;
- : int = 1
# sum (arg 1) (arg 2) (arg 3) z;;
- : int = 6
整潔,是吧?但不要使用這個 - 這是一個黑客。
有關說明,請參閱this page(以SML形式表示,但思路相同)。
OCaml的是強類型,並且在其它(非類型)的語言中使用的許多技術是不適用的。在我看來(經過50年的編程)這是一件非常好的事情,不是問題。
處理可變數量的相同類型的參數最明顯的辦法是通過列表:
# let sum l = List.fold_left (+) 0 l;;
val sum : int list -> int = <fun>
# sum [1;2;3;4;5;6];;
- : int = 21
我不會使用它,因爲傳遞int列表是更好的方法。但非常好的使用更高級別的功能和延續傳球風格。 – 2018-02-27 13:27:17