OCaml函数具有可变数量的参数

时间:2014-10-20 22:09:44

标签: function ocaml variadic-functions

我正在探索"高级"使用OCaml函数,我想知道如何用可变数量的参数编写函数。

例如,函数如:

let sum x1,x2,x3,.....,xn = x1+x2,+x3....+xn

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:10)

有点类型hackery,确定:

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而言,但想法是相同的)。