scala:递归函数组合
我试图强调测试scala函数的组合功能。 具体来说,我试图定义递归函数组合。 因此,问题是在当前的实施中是否有可能做到这一点,如果有,我如何做到这一点 以下是我到目前为止的情况:scala:递归函数组合,scala,function,Scala,Function,我试图强调测试scala函数的组合功能。 具体来说,我试图定义递归函数组合。 因此,问题是在当前的实施中是否有可能做到这一点,如果有,我如何做到这一点 以下是我到目前为止的情况: def f(x: Int) = { println("First ..") x + x / 2 } def g(x: Int) = { println("Second ..") x * x } // this will work as expected val z = f _ compose g _
def f(x: Int) = {
println("First ..")
x + x / 2
}
def g(x: Int) = {
println("Second ..")
x * x
}
// this will work as expected
val z = f _ compose g _
// will not compile: error => recursive value r needs type
// val r = f _ compose r _
val t = z(5)
print(t)
您希望它编译还是运行 在运行时,如果您尝试应用
r
,将出现StackOverflowError
(或类似错误)
您希望它编译还是运行 在运行时,如果您尝试应用
r
,将出现StackOverflowError
(或类似错误)
我希望它运行时不会出现StackOverflow异常,需要设置一些执行限制逻辑。哦。。。我明白了,这只是第二个函数如何停止执行。@Pavel这个“如何”抛出了一个异常,这与函数编程相去甚远(异常是一个副作用)-因此我认为最好以更合适的方式重新实现您的解决方案(即使是必要的)。您在这里的选择:相互递归(带蹦床)、迭代器、streamsQuestion与函数组合特别相关,我对答案很满意。我希望它运行时不会出现StackOverflow异常,需要设置一些执行限制逻辑。哦。。。我明白了,这只是第二个函数如何停止执行。@Pavel这个“如何”抛出了一个异常,这与函数编程相去甚远(异常是一个副作用)-因此我认为最好以更合适的方式重新实现您的解决方案(即使是必要的)。您在这里的选择:相互递归(使用蹦床)、迭代器、streamsQuestion与函数组合特别相关,我对答案很满意。
lazy val r: Int => Int = f _ compose r
def r(n: Int): Int = f(r(n))