Definitionen erstellen
Eigene Definitionen erstellen
Zu Mikas ersten vier Notenpunkten (7, 4, 10 und 13) sind mittlerweile noch einige
weitere dazugekommen. Seine neue Liste enthält nun die Noten: 7, 4, 10, 13, 10, 11, 8 und 12.
All diese Noten jedes mal einzutippen, wenn er sie in einer Funktion verwenden möchte, wird schnell
lästig. In seiner Recherche findet Mika heraus, dass man mit dem Schlüsselwort define
eigene
Definitionen in Racket vornehmen kann.
Aufgabe 1: Funktionsweise von define
(a) Führe die folgenden Ausdrücke nacheinander in der REPL aus. Erkläre anschließend,
welchen Zweck das Schlüsselwort define
in diesem Beispiel erfüllt.
> (+ 2 vier)
> (define vier 4)
> (+ 2 vier)
> (string-length Hallo)
> (define Hallo "Hallo Welt!")
> (string-length Hallo)
(b) Führe die folgenden Ausdrücke nacheinander in der REPL aus. Erkläre anschließend,
welchen Zweck das Schlüsselwort define
in diesem Beispiel erfüllt und wie sich
dieser von der Nutzung in Aufgabe (a) unterscheidet.
> (addition 2 4)
> (define addition +)
> (addition 2 4)
> (define laengeInfo (string-length "Info"))
> laengeInfo
(c) Für welche der folgenden Programmbausteine lässt sich mit define
eine
Definition unter neuem Namen erstellen?
-
Daten:
-
Funktionen:
-
Ausdrücke:
(d) Lege im Definitionsfenster eine Definition für Mikas bisherige Notenliste (7, 4, 10, 13, 10, 11, 8, 12) fest.
Aufgabe 2: define
beim Erstellen von Funktionen
Wir kennen das Schlüsselwort define
bereits von der Erstellung eigener Funktionen.
Zum Beispiel:
;Zieht 1 vom übergebenen Wert ab
(check-expect (minus-eins 13) 12)
(: minus-eins (real -> real))
(define minus-eins
(lambda (x)
(- x 1)
))
(a) Eine weitere Möglichkeit define für die selbe Funktion zu nutzen ist:
(define minus-one minus-eins)
Erkläre worin sich diese Verwendung von define
von der Nutzung
in der Erstellung von Funktionen unterscheidet.
(b) Betrachte die folgenden zwei Definitionen...
(define minus-eins-v1
(lambda (x)
(- x 1)
))
(define minus-eins-v2
((lambda (x)
(- x 1)) 20)
)
... welche Ausgaben in der REPL erwartest du, nach der Ausführung der folgenden beiden Zeilen:
> minus-eins-v1
> minus-eins-v2
Überprüfe deine Vermutung.
(c) Erkläre anhand deiner Ergebnisse aus (b) welcher Teil der Funktionsdefinition die tatsächliche Funktion darstellt?