Functional programming 应用函数n次

Functional programming 应用函数n次,functional-programming,ocaml,Functional Programming,Ocaml,我试图将一个函数应用于一个值n次 目前,我有 let rec n_times (f, n, v) = if n > 0 then n_times f n-1 (f v) else v 出于某种原因,我一直收到一个错误,上面写着 This expression has type 'a but an expression was expected of type 'a * int * 'b The type variable 'a occurs inside 'a * in

我试图将一个函数应用于一个值
n

目前,我有

let rec n_times (f, n, v) = 
 if n > 0 then
  n_times f n-1 (f v)
 else 
  v
出于某种原因,我一直收到一个错误,上面写着

This expression has type 'a but an expression was expected of type 'a * int * 'b 
The type variable 'a occurs inside 'a * int * 'b

我看到一些帖子解决了我正在处理的同一个问题,但没有一个帖子会出现相同的错误。

在代码的第一行:你说“我声明了一个名为
n次的函数,它接受一个三元组
(f,n,v)
,然后在调用站点(第三行)你给出了3个参数


要解决这个问题:在第1行写
let rec n_times f n v=
或在第3行写
n_times(f,n-1,(f v))

在代码的第一行:你说“我声明了一个名为
n_times
的函数,它包含一个三元组
(f,n,v)
,然后在调用站点(第三行)给出3个参数


要解决此问题,请在第1行上编写
let rec n_times f n v=
,或在第3行上编写
n_times(f,n-1,(f v))

您已定义函数以获取3元组值。因此,当您递归调用它时,需要提供一个3元组:

n_times (f, n - 1, f v)

您已将函数定义为接受3元组值。因此,当您递归调用它时,需要提供一个3元组:

n_times (f, n - 1, f v)

至少有两个问题,了解递归以外的其他用途会有所帮助

要让它运行,您必须更改第三行<代码>n_次
由三个输入定义,因此需要用三个输入调用它。此外,该函数定义为接受常规、整数和常规输入,并输出常规类型

您可以删除
(fv)
并只输入
v
每个循环

# let rec n_times (f, n, v) =
    if n > 0 then
        n_times (f , n-1 , v)
    else
      v;;
val n_times : 'a * int * 'b -> 'b = <fun>
# n_times(2,3,4);;
- : int = 4

这允许列表随着每个循环而增长。

至少有两个问题,了解递归以外的其他用途会有所帮助

要让它运行,您必须更改第三行<代码>n_次由三个输入定义,因此需要用三个输入调用它。此外,该函数定义为接受常规、整数和常规输入,并输出常规类型

您可以删除
(fv)
并只输入
v
每个循环

# let rec n_times (f, n, v) =
    if n > 0 then
        n_times (f , n-1 , v)
    else
      v;;
val n_times : 'a * int * 'b -> 'b = <fun>
# n_times(2,3,4);;
- : int = 4

这允许列表随着每个循环而增长。

对于如何定义具有多个参数的OCaml函数,似乎存在误解。你应该替换

let rec n_times (f, n, v) =
与:


对于如何定义具有多个参数的OCaml函数,似乎存在误解。你应该替换

let rec n_times (f, n, v) =
与: