Strukturierung: Eigenschaften von Funktionen
Der zentrale Baustein der funktionalen Programmierung ist, wie der Name es schon verrät, die Funktion. Und tatsächlich haben wir, seitdem wir mit Racket angefangen haben, schon unbewusst Funktionen genutzt.
Aufgabe 1: Funktionen in Racket
Führe die folgenden Eingaben nacheinander in Racket aus und schau dir die Ausgaben in der REPL an.
> ceiling
> max
> odd?
> string-length
> +
Die Funktion
Unsere Operatoren sind tatsächlich nichts anderes als der Name von Funktionen. Mit der Hilfe von Ausdrücken rufen wir in Racket Funktionen mit geeigneten Daten als Operanden auf.
Eigenschaften von Funktionen
In diesem Kapitel haben wir noch einige wichtige Eigenschaften von Funktionen entdeckt. So haben wir festgestellt, dass manche Eingaben bei unseren zwei Rechnern nicht ausführbar sind. Genauso funktionieren Operatoren nur auf zulässigen Ausdrücken als Operanden.
Funktionen verarbeiten die Übergabedaten zu Rückgabedaten, die wiederum von einem bestimmten Datentyp sind.
Gängige Datentypen in Racket sind die folgenden:
Datentyp | Beschreibung | |
---|---|---|
natural | Alle positiven ganzen Zahlen, inklusive der Null. (natural $\subset$ integer $\subset$ real) |
|
integer | Alle ganzen Zahlen, sowohl negativ als auch positiv. (integer $\subset$ real) |
|
real | Alle reellen Zahlen. | |
string | Eine Zeichenkette. Steht immer in Anführungszeichen " ". | |
boolean | Ein Wahrheitswert. Entweder True (#t) oder False (#f) |
Aufgabe 2: Beschreibungen von (Übergabe/Rückgabe)Daten
Für einige Funktionen haben wir bereits genauere Beschreibungen aufgestellt. Schau dir die zwei hier angegebenen Beschreibungen an. Welche Informationen bezüglich der Übergabedaten und Rückgabedaten liefern diese Beschreibungen?
(a) Funktion: string-length
Beschreibung: string -> natural
(b) Funktion: remainder
Beschreibung: integer integer -> integer
Signaturen von Funktionen
Diese Beschreibung der (Übergabe/Rückgabe)Daten einer Funktion nennen wir Signatur.