2014-10-20 106 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 
相关问题