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.

Funktionskomposition

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.

X

Fehler melden

X

Suche