我正在尝试创建一个包含{"id":275,"method":"setValue","params":"50.00"}* Closing connection 0
函数的迭代函数和一个自然数,该自然数指示对该函数进行多少次迭代。它将输出另一个'a => 'a
函数。
输入示例:
'a => 'a
let func: int => int = num => x-2;
将输出iterate(func, 3)
或func(func(func()))
但是,我有此代码
x-6
它正在let rec iterate: ('a => 'a, int) => ('a => 'a) = (f, n) =>
switch(n){
| 1 => f
| x when x > 1 => f(iterate(f, n-1))
};
下给我这个错误
f(iterate(f, n-1))
编辑:出于某种原因,我认为这与编译器以This expression has type 'a => 'b but an expression was expected of type ('a => 'b, 'a) => 'b.
形式读取的第一行中的类型签名有关,我不知道为什么会这样读取。 >
当我将('a => 'a, int, 'a) => 'a
更改为
iterate
编译器显示
let rec iterate = (f: 'a => 'a, n: int): ('a => 'a) => f;
答案 0 :(得分:0)
在第二个分支中,给f
递归调用iterate
的结果,根据您的类型注释,该结果返回一个函数。因此'a
必须是函数'a => 'b
。另外,如果您直接返回调用f
的结果,则该结果也必须是一个函数,因为这就是iterate
应该返回的结果。
因此,您不能直接返回应用f
的结果。您必须返回一个函数,该函数使用给定的值调用f
,然后将其返回值传递给从对iterate
的递归调用返回的函数(或者相反),然后返回那个值。