OCaml
(Generell werden tail-rekursive Lösungen bevorzugt)
- Implementieren Sie eine rekursive Funktion, die den erweiterten euklidischen Algorithmus zweier ganzen Zahlen berechnet. Aufruf ggt (m, 1, 0) (n, 0, 1) ergibt (d, λ, μ) sodass d := λm+μn.
- Implementieren Sie eine rekursive Funktion, die einen eingegebenen
String umdreht ("reverse ['h';'a';'l';'l';'o']" ergibt z.B.
"['o';'l';'l';'a';'h']").
- Implementieren Sie eine rekursive Funktion, die die Zahlen, die in einer gegebenen Liste enthalten sind, summiert und dann die Summe ausgibt (benutzen Sie dabei das Schlüsselwort "match").
- Implementieren Sie eine rekursive Funktion, die den höchsten Wert einer gegebenen Liste von natürlichen Zahlen ausgibt.
- Implementieren Sie eine rekursive Funktion, die ein Tupel (a,b) einliest. Anschließend wird eine Liste mit a verketteten Tupeln (b,b) ausgegeben (der Aufruf "f (5,3)" ergibt z.B. "[(3,3);(3,3);(3,3);(3,3);(3,3)]", "f (4,2)" ergibt z.B. "[(2,2);(2,2);(2,2);(2,2)]").
- Implementieren Sie eine rekursive Funktion, die ausgibt, wie oft ein bestimmtes Element, das angegeben wird, in einer gegebenen Liste enthalten ist ("occurs_n 5 [4;3;5;6;5;2]" ergibt z.B. "2").
- Implementieren Sie eine rekursive Funktion, die ein bestimmtes Element, das angegeben wird, aus einer gegebenen Liste entfernt ("filterList 5 [4;3;5;6;5;2]" ergibt z.B. "[4;3;6;2]").
- Ergänze die Datei Einkauf.ml um die zwei Funktionen faktor und preis (siehe Kommentare), sodass der Gesamtpreis der auf der Einkaufsliste stehenden Waren berechnet wird ("preis d preise" ergibt "11.7").
Zusatzaufgabe: Andere Programmiersprachen
Lösen Sie die Übungen 5. 6. 7. in zwei der im Rahmen der Theorie vorgestellten Programmiersprachen Ihrer Wahl unter Berücksichtigung der funktionalen Konzepte.
Sie können bspw. Java und PHP nutzen, müssen dabei aber auf alle iterativen Konzepte verzichten (u.a. kein for), genau so, wie Sie es in Ocaml handhabten.
Zusatz:
Symbolischer Differenzierer in Ocaml (unter dieser Aufgabe im Moodle-Kurs)