Kotlin:高阶函数递归,迭代且具有折叠

时间:2019-12-19 17:58:13

标签: recursion kotlin iteration higher-order-functions

我正在学习Kotlin和函数式编程。我必须为密封的类实现自己的功能。应该以三种不同的方式创建函数之一:递归,迭代和使用fold函数。我选择了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

现在我正在寻找一种不同的方法。是否可以通过将任何功能映射到fold函数来创建任何功能?想法很受欢迎。

1 个答案:

答案 0 :(得分:0)

使用符号:

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
}