RSI T IS I UN SA R VE AS FR 6.2 – Informatik Prof. Dr. Reinhard Wilhelm Peter Mirold Jörg Bauer S Universität des Saarlandes A V EN I 10.Januar 2002 Übungsblatt 9: Programmierung (WS 2001) Abgabetermin: 17. Januar 2002 Aufgabe 1 (2+3 Punkte) Datentyp option (a) Schreiben Sie die Funktion finde von Blatt 8, Aufgabe 2, so um, dass sie NONE zurückgibt, falls kein Element gefunden wird und Typ ’a list * (’a -> bool) -> ’a option hat. (b) Schreiben Sie die Funktion lookup aus der Vorlesung so um, dass sie ein gefundenes Element zurückgibt. lookup soll Typ (’a * ’a -> bool) * ’a btree * ’a -> ’a option haben. Aufgabe 2 (3+3 Punkte) Symbolisches Differenzieren Wir stellen Polynome n-ten Grades (n 0) über X mit ganzzahligen Koeffizienten als Liste ganzer Zahlen dar. Hierbei sei die Liste k 0 k1 kn die Darstellung des Polynoms kn X n k X k . Wir definieren type polynom = int list. 1 0 (a) Schreiben Sie eine Funktion prettyprint: polynom -> string, die ein Polynom als Zeichenkette ausgibt. Hierbei sollen Potenzen mit Koeffizientem 0 (0 X k ) nicht ausgegeben und Potenzen mit Koeffizientem 1 (1 X k ) ohne die 1 (X k ) ausgegeben werden. werden. Beispiel: prettyprint 0 1 0 2 =”X + 2 Xˆ 3”. Hinweis: Die eingebaute Funktion print: string -> unit gibt Zeichenketten auf dem Bildschirm aus. (b) Schreiben Sie eine Funktion diff: polynom -> polynom, die die Ableitung eines Polynoms berechnet. Aufgabe 3 (3+3 Punkte) Traversieren von B äumen (a) Schreiben Sie eine Funktion summe: int btree -> int, die die Summe der Knotenmarkierungen eines Baumes berechnet. (b) Schreiben Sie eine Funktion relabel: ’a btree * (’a -> ’b) -> ’b btree, wobei relabel t f den Baum t zurückgibt, in dem jede Markierung x durch f x ersetzt ist. Aufgabe 4 (5 Punkte) AVL-Eigenschaft Man sagt, dass ein binärer Baum die AVL-Eigenschaft besitzt, wenn für alle inneren Knoten gilt, dass die Höhe des linken und des rechten Unterbaums sich um maximal 1 unterscheidet. Schreiben Sie eine Funktion avl: ’a tree -> bool, die entscheidet ob ein binärer Baum die AVL-Eigenschaft besitzt. Aufgabe 5 (8 Punkte) Pretty Printing Schreiben Sie eine Funktion pretty: ’a btree * (’a -> string) -> unit, die einen binären Baum wie folgt auf dem Bildschirm ausgibt --> 1 --> 5 --> 7 --> 6 --> 8 --> 2 --> 4 --> 9 --> 3 Das zweite Argument ist die Funktion, die benötigt wird, um Werte des Typs ’a in Strings umzuwandeln, z.B. Int.toString. Hinweis: Zeilenumbruch innerhalb eines Strings erreicht man durch ” n”. Weitere Sonderzeichen findet man in der Moscow ML Language Overview.