transcendental-lisp/src/main/kotlin/recursion/MutualTailCalls.kt

14 lines
408 B
Kotlin

package recursion
object MutualTailCalls {
fun <T> recursiveCall(nextCall: () -> MutualTailCall<T>) = object : MutualTailCall<T> {
override fun apply() = nextCall()
}
fun <T> terminalValue(value: T) = object : MutualTailCall<T> {
override fun isTerminal() = true
override fun result() = value
override fun apply() = throw UnsupportedOperationException()
}
}