任意类型a的函数组成


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))

最新更新