我在探索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