Schreiben Sie rekursive Funktionen für einen Datentypen einfach verketteter Listen. Die Listen sind nicht modifizierbar.
fun <A> isEmpty(xs:List<A>):Boolean
Nur wr für Nil-Listen.
fun <A> length(xs:List<A>):Int
Die Anzahl der Elemente in xs.
fun <A> last(xs:List<A>):A
Das leztzte Element. Wirft Ausnahme für leere Listen.
fun <A> append(xs:List<A>, ys:List<A>):List<A>
Hängt zwei Listen aneinander.
fun <A> take(xs:List<A>,n:Int):List<A>
Nimmt die Teilliste der ersten n Elemente aus xs.
fun <A,B> map(xs:List<A>,f:(A)->B):List<B>
Erzeugt neue Liste durch Anwendung der Funktion auf alle Elemente.
fun <A> forEach(xs:List<A>,f:(A)->Unit):Unit
Wendet einen Code-Block auf alle Elemente an.
fun <A> filter(xs:List<A>,p:(A)->Boolean):List<A>
Teilliste aller Elemente, für die die Eigenschaft p gilt.
fun <A,B> fold(xs:List<A>,s:B,op:(B,A)->B): B
Faltung mit dem übergebenen Operator und Startwert.
fun <A> reverse(xs:List<A>):List<A>
Erzeugt Liste mit Elementen in umgekehrter Reihenfolge. Kann mit Faltung realisiert werden.
fun <A> concat(xss:List<List<A>>):List<A>
Nimmt aus einer Liste von Listen alle Element für eine Ergebnisliste. Kann mit Faltung realisiert werden.
fun sum(xs:List<Int>):Int
Berechnet die Summe aller Elemente der Zahlenliste. Kann mit Faltung realisiert werden.
package name.panitz.util
sealed class List<out T>
object Nil: List<Nothing>(){
override fun toString(): String ="Nil"
}
data class Cons<out T>(val hd:T,val tl:List<T>):List<T>()
fun <A> isEmpty(xs:List<A>):Boolean
fun <A> length(xs:List<A>):Int
fun <A> last(xs:List<A>):A
fun <A> append(xs:List<A>, ys:List<A>):List<A>
fun <A> take(xs:List<A>,n:Int):List<A>
fun <A,B> map(xs:List<A>,f:(A)->B):List<B>
fun <A> forEach(xs:List<A>,f:(A)->Unit):Unit
fun <A> filter(xs:List<A>,p:(A)->Boolean):List<A>
fun <A,B> fold(xs:List<A>,s:B,op:(B,A)->B): B
fun <A> reverse(xs:List<A>):List<A>
fun <A> concat(xss:List<List<A>>):List<A>
fun sum(xs:List<Int>):Int