Kotlin:高阶函数递归、迭代和折叠



我正在学习 Kotlin 和函数式编程。我必须为密封类实现自己的函数。其中一个函数应该以三种不同的方式创建:递归、迭代和使用折叠函数。我选择了any()功能。

经过大量研究,我唯一的想法是创建一个 tailrec 函数并在函数中使用 fold:

fun <T> anyFold (list: MyList<T>, p: (T) -> Boolean)  {
tailrec fun <R> fold (list : MyList<T>, init: R, transform: (R, T) -> R) : Boolean {
when (list) {
is MyList.Node -> fold(list.tail, transform(init,list.head),transform)
is MyList.Nil -> init
}
return fold(list, init, transform)
}

}

但我认为这不是应该这样做的方式,因为结果是AnyFold kotlin.Unit.

现在我正在寻找一种不同的方法。有没有办法通过将 any 函数映射到折叠函数来创建它?非常欢迎提出想法。

使用您的符号:

fun <T> anyFold(list: List<T>, p: (T) -> Boolean): Boolean =
list.fold(false, { acc, element -> acc || p(element) })

fun main() {
println(  anyFold( listOf(1,2,3,4,5)) {it < 5 }) // true
println(  anyFold( listOf(1,2,3,4,5)) {it > 5 }) // false
}

最新更新