Eigenschaften von Definitionen
Definitionen verändern
Im Laufe eines Schuljahres sammeln sich immer mehr Notenpunkte an durch Klassenarbeiten, Epochalnoten, Referate usw.. Unsere bisherige Definition der Notenliste bildet bisher jedoch nur den aktuellen Stand ab. Mika sucht daher eine Möglichkeit, seine Definitionen auch später noch flexibel anzupassen.
Aufgabe 1: 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 2: 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) - Sofern noch nicht geschehen - 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?