2017-11-03 12 views
4

これは、CourseraのScala MOOCから取得した関数のKotlinに相当します。範囲(a..b)に与えられたマッパー(f)を適用する関数を返します。他のKotlin関数からの再帰関数の返却

fun sum(f: (Int) -> Int): (Int, Int) -> Int { 
    fun sumF(a: Int, b: Int): Int = 
      if (a > b) 0 
      else f(a) + sumF(a + 1, b) 
    return sumF 
} 

しかし、これらのエラーはIntelliJに表示されます。ここから関数を返すにはどうすればいいですか? enter image description here

答えて

2

::を関数参照として使用する必要があります。あなたが名前の関数(fun foo(...))を定義する場合

fun sum(f: (Int) -> Int): (Int, Int) -> Int { 
    fun sumF(a: Int, b: Int): Int = 
      if (a > b) 0 
      else f(a) + sumF(a + 1, b) 
    return ::sumF 
}