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) =
与: