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))
关于scala - 任意类型A的函数组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68971891/