Приветствую читатель!
Сегодня приведу пример реализации односвязного списка на Kotlin.
Листинг из книги: Пьер-Ив Симон: Волшебство Kotlin
Kotlin
fun main() {
val list = List(1, 2, 3)
println(list)
}
sealed class List<A> {
abstract fun isEmpty(): Boolean
private object Nil : List<Nothing>() {
override fun isEmpty() = true
override fun toString() = "[NIL]"
}
private class Cons<A>(
val head: A,
val tail: List<A>
) : List<A>() {
override fun isEmpty() = false
override fun toString() = "[${toString("", this)}NIL]"
private tailrec fun toString(acc: String, list: List<A>): String =
when (list) {
is Nil -> acc
is Cons -> toString("$acc${list.head}, ", list.tail)
}
}
companion object {
operator
fun <A> invoke(vararg az: A): List<A> =
az.foldRight(Nil as List<A>) { a: A, list: List<A> ->
Cons(a, list)
}
}
}