Übungen
Aufgabe 1 - Anonyme Funktionen
Formuliere mit Hilfe von anonymen Funktionen folgende Funktionen:
a) Eine Funktion, die eine Liste von Zahlen auf deren Quadratzahlen abbildet und z.B. so aufgerufen werden kann:
b) Eine Funktion, die alle ungeraden Zahlen einer Liste zurückgibt und z.B. so aufgerufen werden kann:
c) Eine Funktion, die eine Liste von Zahlen aufsummiert, wenn sie größer als eine gegebene Zahl sind und z.B. so aufgerufen werden kann:
d) Eine Funktion, die aus einer Liste von Noten eine Liste mit den Werten "bestanden" oder "nicht bestanden" berechnet und z.B. so aufgerufen werden kann:
Aufgabe 2 - Partiell angewandte Funktionen
Der REPL-Dialog benutzt partiell angewandte Funktionen.
Stelle zunächst Vermutungen auf, was jeweils anstelle von ...
steht. Überprüfe, indem du den REPL-Dialog selbst führst. Erkläre die Ergebnisse.
Aufgabe 3 - Listenverarbeitung mit partiell angewandten Funktionen
Der REPL-Dialog benutzt partiell angewandte Funktionen zur Verarbeitung von Listen.
Stelle zunächst Vermutungen auf, was jeweils anstelle von ...
steht. Überprüfe, indem du den REPL-Dialog selbst führst. Erkläre die Ergebnisse.
Aufgabe 4 - Caesar-Verfahren und Funktionskomposition
a) Buchstaben verschieben
Beim Caesar-Verfahren werden (Groß-) Buchstaben duch (Groß-) Buchstaben ersetzt, die im Alphabet um 3 Einheiten verschoben sind. Der Buchstabe 'G' wird also durch 'J' ersetzt, der Buchstabe 'Y' durch den den zyklisch im Alphabet verschobenen Buchstaben 'B'.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z | | | | | | | | | | | | | | | | | | | | | | | | | | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Eine Buchstabenverschiebung lässt sich mit Hilfe vordefinierter Funktionen so realisieren:
Char.toCode 'Y' -> 89 89 - 65 -> 24 24 + 3 -> 27 modBy 26 27 -> 1 65 + 1 -> 66 Char.fromCode 66 -> 'B'
Entwickle eine Implementierung dieser Buchstabenverschiebung. Benutze dabei den Pipe-Operator oder den Kompositionsoperator.
b) Einen Text verschlüsseln
Die Verschlüsselung ganzer Zeichenketten lässt sich mit Hilfe der String.map
-Funktion realisieren. Man könnte aber auch ohne diese Funktion auskommen und die Verschlüsselung mit Hilfe von Listen und der List.map
-Funktion realisieren. Dazu müsste man eine Zeichenkette in eine Liste umwandeln, um diese dann zu verarbeiten:
String.toList "HALLO" -> ['H','A','L','L','O'] List.map (... Buchstabenverschiebung ...) ['H','A','L','L','O'] -> ['K','D','O','O','R'] String.fromList ['K','D','O','O','R'] -> "KDOOR"
Implementiere diese Verschlüsselung von Zeichenketten. Benutze dabei den Pipe-Operator oder den Kompositionsoperator.
Aufgabe 5
Gar nicht so einfach: Versuche vorherzusagen, welche Rückgaben die in den folgenden REPL-Dialogen definierten Funktion liefern. Teste und erkläre die Ergebnisse.