Kotlin – Cómo recursivamente llamar a una function lambda

Estoy tratando de volver a implementar la function de linrec desde aquí en Kotlin. Esto es lo que actualmente se ve en 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 me da los siguientes errores cuando bash ejecutar el código:

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

Mi pregunta es: ¿cómo hago que una function lambda se llame sola?

    No llamas a una lambda ("function anónima") desde dentro de sí misma. Para eso son las funciones:

     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 } 

    Ahora bien, este es exactamente el código que ha escrito, pero no comstack. En la línea que marqué con * kotlinc dice Type mismatch: infernetworking type is B but A was expected

    PD. No tengo idea de lo que está haciendo ese código, así que solo solucioné el error de compilation que me has preguntado.