我试图在scala中定义一个递归的lambda表达式,并且如果认为这只是一个语法,那么与sintax有点挣扎: 这是我到目前为止(不可编译):
type rec = (Int => Int, Int)
val f = (x : Int) => x + x
val y : rec = (f:Int => Int, x:Int) => if (x > 0) y( f, 1) else 1
Error I am getting:
ScalaFiddle.scala:14: error: ScalaFiddle.rec does not take parameters
val y : rec = (f:Int => Int, x:Int) => if (x > 0) y( f, 1) else 1
^
我正在尝试优化的原始代码示例(工作正常):
case class Rec[I, O](fn : (I => O, I) => O) extends (I => O) {
def apply(v : I) = fn(this, v)
}
val sum = Rec[Int, Int]((f, v) => if (v == 0) 0 else v + f(v - 1))
任何帮助都将不胜感激。
由于
答案 0 :(得分:1)
rec是Tuple2[Int => Int,Int]
类型的元组。
在您的语句val y : rec = (f:Int => Int, x:Int) => if (x > 0) y( f, 1) else 1
中,您尝试在元组y(y(f,1)
)上调用apply函数。由于元组没有定义应用函数,因此您收到错误rec does not take parameters
根据您的示例代码,您的类型为(Int => Int, Int) => Int
。
因此代码示例将是
type rec = (Int => Int, Int) => Int
val f = (x : Int) => x + x
val y : rec = (f:Int => Int, x:Int) => if (x > 0) y( f, 1) else 1
答案 1 :(得分:0)
Check This link for this answer explanation
var sumIt:(Int => Int) = (x: Int) => {if(x<=1) 1 else sumIt(x-1)+x