Definitionen und deren Unveränderlichkeit
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:
Aufgabe 2: Veränderbarkeit von Definitionen
(a) Betrachte die folgenden Ausdrücke und überlege welche Ausgaben du erwartest, wenn du diese nacheinander ausführst. Überprüfe deine Vermutung in der REPL.
> (define x 1)
> (+ 10 x)
> (define x 10)
> (+ 10 x)
(b) Vergleiche deine Beobachtung mit deinem Wissen über Variablen aus anderen Programmiersprachen. Welche Unterschiede und Gemeinsamkeiten stellst du fest?
Aufgabe 3: Veränderbarkeit von Definitionen durch Funktionen
Um seine Notenliste aktuell zu halten hat Mika die Funktion an-rest-anhaengen
geschrieben:
;Fügt ans Ende einer übergebenen Liste ein übergebenes Element an
(: an-rest-anhaengen ((list-of %a) %a -> (list-of %a)))
(check-expect (an-rest-anhaengen (list 1 2) 3) (list 1 2 3))
(define an-rest-anhaengen
(lambda (lis elem)
(append lis (list elem))
) )
(a) Lege im Definitionsfenster eine Definition für Mikas bisherige Notenliste (7, 4, 10, 13, 10, 11, 8, 12) fest.
(b) Übertrage die Funktion an-rest-anhaengen
in das Definitionsfenster.
(c) Hänge mit geeigneten Funktionsaufrufen an Mikas Notenliste die Noten 13 und 14 an. Welche Noten befinden sich anschließend in der Definition der Notenliste?
(d) Mika möchte, dass seine neue, aktualisierte Notenliste unter einem Namen gespeichert bleibt. Was würdest du ihm empfehlen, damit er jederzeit auf diese aktualisierte Liste zugreifen kann?