2014-10-20 124 views

回答

8

帶着幾分型兩輪牛車的,肯定的:

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形式表示,但思路相同)。

+0

我不會使用它,因爲傳遞int列表是更好的方法。但非常好的使用更高級別的功能和延續傳球風格。 – 2018-02-27 13:27:17

9

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 
相關問題