gpt4 book ai didi

recursion - Kotlin - 如何递归调用 lambda 函数

转载 作者:行者123 更新时间:2023-12-02 23:19:46 25 4
gpt4 key购买 nike

我正在尝试重新实现 here 中的 linrec 函数在 Kotlin 中。这是 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
}

当我尝试运行代码时,IntelliJ 给出以下错误:

Error:(40, 19) Kotlin: Unresolved reference: myfunc

我的问题是:如何进行 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
}

现在这正是您编写的代码,但它无法编译。在我用 * 标记的行上,kotlinc 说 类型不匹配:推断类型是 B,但预期是 A

附注我不知道该代码在做什么,所以我只修复了您询问的编译错误。

关于recursion - Kotlin - 如何递归调用 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com