Scala高阶函数

时间:2016-04-15 11:53:25

标签: scala

我知道这是一个任务问题,但我似乎无法弄清楚如何做到这一点。我对Scala很新,并且语法有问题。

我想知道如何做到这一点:

编写一个函数compose,它接受​​两个函数并一个接一个地应用。所以compose - 函数有两个函数作为参数,一个函数作为输出:

val f = compose(fib, square)
f(3)    //   f(3) == fib(square(3)) == fib(9) == 34

到目前为止我尝试的代码:

val f = compose(fib, square)

def compose(f: Int => Int, x: Int => Int): Int = {
  f(x())
}

def square(i: Int): Int = {
  i * i
}

def fib(i: Int): Int = {
  if (i < 2) {
    i
  } else {
    fib(i - 1) + fib(i - 2)
  }
}

我似乎无法弄清楚语法应该如何,所以我可以调用f(3)并获得34作为结果。

1 个答案:

答案 0 :(得分:1)

好的,这是:

def compose(f: Int => Int, x: Int => Int): Int => Int = {
  i => f(x(i))
}

您只需命名输入参数(i),然后您可以使用它来传递给函数x