Strukturierung
Möchte man in Racket einen neue Funktion definieren, so muss man dabei auf einige Sachen achten. In der Erkundung haben wir bereits die wichtigsten Eigenschaften einer solchen Definition herausgefunden.
Die Signaturdefinition und die Funktionsdefinition
Möchten wir in Racket eine neue Funktion erstellen so nutzen wir dafür genaugenommen zwei Ausdrücke, die Signaturdefinition, die die Signatur für die neue Funktion festlegt und die Funktionsdefinition, die die Logik der Funktion definiert:
(: kostenFarbmenge (natural -> real)) (define kostenFarbmenge (lambda (liter) (* liter 7.4) ))
Bestandteile der Funktionsdefinition
Die Funktionsdefinition legt zum einen den Namen der Funktion fest und bestimmt zum anderen die Bezeichner, mit denen die übergebenen Daten innerhalb der Funktion verwendet werden. Diese Bezeichner nennen wir Parameter. Außerdem enthält die Funktionsdefinition einen Funktionskörper, bestehend aus einem Ausdruck, der die Parameter verarbeitet und das Rückgabedatum der Funktion erzeugt.
(define kostenFarbmenge (lambda (liter) (* liter 7.4) ))
Innerhalb des Funktionskörpers erfolgt die Verarbeitung der Übergabedaten zu einem Rückgabedatum. Der Funktionskörper besteht aus einem einzelnen Ausdruck, dessen erzeugtes Rückgabedatum auch das Rückgabedatum der gesamten Funktion ist.
Aufgabe 1: Signaturdefinitionen ergänzen
Ergänze eine geeignete Signaturdefinition für die folgenden Funktionen:
(a)
(define zahlVerdoppeln (lambda (zahl) (* 2 zahl) ))
(b)
(define buchstabenUngerade? (lambda (wort) (odd? (string-length wort)) ))
(c)
(define volumenQuader (lambda (hoehe breite laenge) (* hoehe (* breite laenge)) ))
Aufgabe 2: Funktionsdefinitionen vervollständigen
Neue Datei - funktionen_vervollständigen.rkt
Füge den jeweiligen Racket-Code in deine Datei ein und vervollständige diese. Überprüfe deine Lösung mit geeigneten Funktionsaufrufen in der REPL.
(a) Die Funktion soll den Durchschnitt zweier ganzer Zahlen berechnen:
(: durchschnitt (integer integer -> real))
(define durchschnitt
(lambda (...)
(...)
))
(b) Die Funktion soll prüfen, ob eine Zahl oder die An zahl der Zeichen eines Strings größer ist, und den größeren Wert zurückgeben.
(: wasIstGroesser (natural string -> natural))
(define wasIstGroesser
(lambda (...)
(...)
))