def iter[A](f: A => A, n: Int): A => A = {
if (n == 1) {
f
} else {
f(iter(f,n-1))
}
}
我想建立一个函数iter
,它使f
的函数组合,例如:
iter(f,1) = f
iter(f,2) = f(f)
但是我找不到一种方法,如何递归地将A
类型传递给f
函数,我该如何解决这个问题?
请注意,在您的代码f(iter(f,n-1))
中,f
接受A
的实例,但iter(f, n-1)
的类型为A => A
。
这是一个解决方案:
scala> def iter[A](f: A => A, n: Int): A => A =
| if (n == 0) identity else f.compose(iter(f, n-1))
|
def iter[A](f: A => A, n: Int): A => A
scala> iter[Int](x => x + 1, 10)(0)
val res0: Int = 10
或不含compose
:
scala> def iter[A](f: A => A, n: Int): A => A =
| if (n == 0) identity else x => iter(f, n-1)(f(x))
或者更简单:
scala> def iter[A](f: A => A, n: Int): A => A = Function.chain(Seq.fill(n)(f))