Kotlin – Как рекурсивно назвать лямбда-функцию

Я пытаюсь реализовать функцию linrec здесь, в Котлине. Вот что он сейчас выглядит в Котлине:

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 

Мой вопрос: как мне самому вызвать вызов лямбда-функции?

    Вы не называете лямбда («анонимная функция») внутри себя. Вот какие функции предназначены для:

     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, указано Type mismatch: inferred type is B but A was expected

    PS Я понятия не имею, что делает этот код, поэтому я только исправил ошибку компиляции, о которой вы просили.

    Intereting Posts
    Как вернуть список с ненулевым элементом, с карты? Как я могу определить, является ли число 10 в Котлине или Яве? Встроенная функция Kotlin не работает должным образом Как мне выполнить «перерыв» или «продолжить», когда в функциональном цикле внутри Котлина? kotlin grpc.StreamObserver для удаления в rx.PublishSubject Почему я получаю сообщение об ошибке «Смарт-бросок в« Лонг »невозможно» в Котлине? Но это нормально в java? Контрактное тестирование DSL неправильное поведение / ошибка Как правильно настроить плагин Kotlin для Gradle? Как перевести java-интерфейс в kotlin Kotlin IllegalAccessError с + = и – = для делегированного интерфейса Несовместимые типы: A и kotlin.reflect.KType Повторный набор API-вызовов: как убедиться, что после вызова api значение не равно нулю? Как добавить панель инструментов в Android PreferenceActivity, когда NoActionBar установлен в качестве темы приложения? Как использовать с оберткамиDefault? Написание Realm Daos с закрытыми транзакциями