Strukturierung
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, die ganze Zeit 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 nicht anderes als der Name von Funktionen. Mit der Hilfe von Ausdrücken rufen wir in Racket Funktion mit geeigneten Daten als Operanden auf.
Eine Funktion ist eine Verarbeitungseinheit, die Daten übergeben bekommt
und anhand dieser neue Daten produziert.
Eigenschaften von Funktionen
In diesem Kapitel sind wir noch über einige wichtige Eigenschaften von Funktionen gestolpert. So haben wir festgestellt, dass manche Eingaben bei unseren zwei Rechnern, sowie einige Operanden bei Racket-Ausdrücken nicht ausführbar sind.
Eine Funktion erhält Übergabedaten,
welche innerhalb der Funktion verarbeitet werden.
Je nach Funktion müssen diese Daten von einem spezifischen Typ sein. Diese unterschiedlichen Typen nennen wir
Datentypen.
Funktionen verarbeiten die Übergabedaten zu Rückgabedaten, welche wiederum von einem bestimmten Datentyp sind.
Funktionen verarbeiten die Übergabedaten zu Rückgabedaten, welche wiederum von einem bestimmten Datentyp sind.
Aufgabe 2: Beschreibungen von (Übergabe/Rückgabe)Daten
Für einige Funktionen haben wir bereits genauere Beschreibungen aufgestellt. Schau dir die zwei hier angeben Beschreibungen an. Welche Informationen bezüglich der Übergabedaten und Rückgabedaten liefert diese Beschreibungen?
(a) Funktionsname: string-length
Beschreibung: string -> natural
(b) Funktionsname: remainder
Beschreibung: integer integer -> integer
Signaturen von Funktionen
Diese Beschreibung der (Übergabe/Rückgabe)Daten einer Funktion nennen wir Signatur.
Jede Funktion besitzt eine eindeutige Signatur, welche angibt wie viele
Übergabe- und Rückgabedaten die Funktion besitzt und von welchem Datentyp die jeweiligen Daten sein müssen.