M K*_*ane 4 recursion lambda kotlin
我试图重新从实现linrec功能这里在科特林.以下是Kotlin目前的情况:
fun <A, B> linrec(indivisible: (List<A>) -> Boolean,
value: (List<A>) -> B,
divide: (List<A>) -> List<List<A>>,
combine: (A, B) -> B
) : (List<A>) -> B {
val myfunc: (List<A>) -> B = { input ->
if (indivisible(input)) {
value(input)
} else {
val split = divide(input)
val left = split[0][0]
val right = myfunc(split[1]) // Error
combine(left, right)
}
}
return myfunc
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行代码时,IntelliJ给出了以下错误:
Error:(40, 19) Kotlin: Unresolved reference: myfunc
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何自己调用lambda函数?
你不从内部调用lambda("匿名函数").这就是函数的用途:
fun <A, B> linrec(indivisible: (List<A>) -> Boolean,
value: (List<A>) -> B,
divide: (List<A>) -> List<List<A>>,
combine: (A, A) -> B
) : (List<A>) -> B {
fun myfunc(input: List<A>): B { // rearranged things here
return if (indivisible(input)) { // added `return`
value(input)
} else {
val split = divide(input)
val left = split[0][0]
val right = myfunc(split[1])
combine(left, right) // *
}
}
return ::myfunc
}
Run Code Online (Sandbox Code Playgroud)
现在这正是您编写的代码,但它不能编译.在我用*kotlinc 标记的那条线上说Type mismatch: inferred type is B but A was expected.
PS我不知道代码是做什么的,所以我只修复了你问的编译错误.
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |