Station - Funktionskomposition
Beispiel: erstes Zeichen eines Wortes ans Ende verschieben
In einer nicht-leeren Zeichenkette soll das erste Zeichen ganz ans Ende der Zeichenkette gesetzt werden. Aus 'TOR' soll so 'ORT' erzeugt werden.
Imperativer Ansatz
Die Lösung des Problems ist ganz einfach:
bestimme das erste Zeichen des Worts entferne das erste Zeichen des Worts füge das Zeichen am Ende des Worts wieder ein
Man kann sie implementieren, indem man geeignete Variablen zur Verwaltung der Daten einführt und mehrere Zuweisungen zur Verarbeitung der Daten hintereinander ausführt.
# Eingabe wort = input('Wort: ') # Verarbeitung # entferne das erste Zeichen des Worts erstesZeichen = wort[0] wort = wort[1:] # füge es am Ende des Worts wieder ein wort = wort + erstesZeichen # Ausgabe print(wort)
Funktionaler Ansatz
Eine funktionale Lösung des Problems benutzt Funktionen als Bausteine. Im Folgenden werden erst einige nützliche Hilfsfunktionen definiert.
def erstesZeichen(wort): return wort[0] def ohneErstesZeichen(wort): return wort[1:] def mitLetztemZeichen(wort, zeichen): return wort + zeichen
Die folgende Abbildung verdeutlicht die Idee einer funktionalen Lösung, die diese Hilfsfunktionen benutzt.
Hier werden die verschiedenen Hilfsfunktionen ineinandergeschachtelt, um die Gesamtlösung aus
den Einzelschritten zu konstruieren. Diese Idee spiegelt sich in der Definition der
Funktion erstesZeichenAlsLetztesZeichen
wider.
def erstesZeichenAlsLetztesZeichen(wort): return mitLetztemZeichen(ohneErstesZeichen(wort), erstesZeichen(wort))
Mit einem Funktionsaufruf erhält man die Lösung zu einem vorgegebenen konkreten Problem.
>>> erstesZeichenAlsLetztesZeichen('TOR') 'ORT'
Komposition bzw. Verkettung von Funktionen
Bei der Komposition bzw. Verkettung von Funktionen werden Funktionen ineinandergeschachtelt aufgerufen.
So kommen im folgenden Beispiel die Funktionsaufrufe ohneErstesZeichen(wort)
und erstesZeichen(wort)
beim Aufruf der Funktion mitLetztemZeichen
vor.
def erstesZeichenAlsLetztesZeichen(wort): return mitLetztemZeichen(ohneErstesZeichen(wort), erstesZeichen(wort))
Bei der Auswertung von Ausdrücken mit ineinandergeschachtelten Funktionen werden (in der Regel) erst die inneren Funktion ausgewertet. Mit den erzielten Ergebnissen arbeiten dann die äußeren Funktionen weiter
Im Abschnitt ... (siehe lazy evaluation) gehen wir kurz auf eine Abweichung von diesem Auswertungskonzept ein.
Aufgabe 1
Löse die Probleme in (a) und (b) analog mit einer Funktion, die geeignete Hilfsfunktionen benutzt.
(a) In einer nicht-leeren Zeichenkette soll das letzte Element ganz an an den Anfang der Zeichenkette gesetzt werden. Aus 'ORT' soll so 'TOR' erzeugt werden.
(b) In einer nicht-leeren Zeichenkette soll das erste mit dem letzten Zeichen ausgetauscht werden. Aus 'TOR' soll so 'ROT' erzeugt werden.