编写一个函数和的函数

时间:2014-11-14 16:55:14

标签: functional-programming ocaml

我有以下练习:

Code a function that will be a summation of a list of functions. 

所以我认为这意味着如果一个函数得到函数列表[f(x); g(x); h(x); ...],它必须返回一个函数f(x)+ g( X)+ H(X)+ ...

我正在尝试为一般情况做代码,这是我提出的事情:

let f_sum (h::t) = fold_left (fun a h -> (fun x -> (h x) + (a x))) h t;;

问题是我正在使用“+”运算符,这意味着它只在列表中有效时才能使用

类型的函数
'a -> int

那么,它可以更“普遍”地完成吗,我的意思是我们可以编写一个函数,即列表中给出的('a - >'b)函数的总和吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以将plus函数作为函数的参数,例如

let f_sum plus fs = 
  let (+) = plus in
  match fs with 
  | [] -> invalid_arg "f_sum: empty list"
  | f :: fs -> fold_left ...

您可以进一步概括,并要求用户提供zero值,以便您可以返回一个函数,如果列表为空则返回零。您还可以使用记录对函数进行分组,甚至可以使用第一类模块(参见核心库中的Commutative_group.S)。