OCaml递归函数应用函数n次

Biz*_*zle 3 ocaml functional-programming function

我想在OCaml中创建一个类型为int - >('a - >'a) - >'a - >'a的函数,它接受一个int n(非负)和一个函数f'a - >'a和a的类型的参数a.f应该被召唤一次.

我尝试了3种不同的东西,但只能得到int - >('a - >'b) - >'a - >'b,这里有一些我尝试过的东西.

let rec f n g a = 
g a;
f (n-1) g a;;
Run Code Online (Sandbox Code Playgroud)

这使

val f : int -> ('a -> 'b) -> 'a -> 'c = <fun>
Run Code Online (Sandbox Code Playgroud)

我试过了

    let rec f n g a =
  if n > 0 then f (n-1) g a
  else g a
  ;;
Run Code Online (Sandbox Code Playgroud)

这给了我

val f : int -> ('a -> 'b) -> 'a -> 'b = <fun>
Run Code Online (Sandbox Code Playgroud)

第二个更接近,但我对如何获得int - >('a - >'a) - >'a - >'a感到茫然

did*_*erc 5

我不太确定你要做什么.我想这是下面的功能:

let rec foldi i f acc =
    if i <= 0 then acc else foldi (pred i) f (f acc)
Run Code Online (Sandbox Code Playgroud)

以递归方式将i函数的次数乘以f一个值acc,然后再映射到其结果.foldi虽然可能不是最好的名字.