i

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

Leere Datei - muss nicht gespeichert werden

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?

Suche

v
100.137.3.2.1 Definitionen und deren Unveränderlichkeit
Kopieren durch Anklicken

Rückmeldung geben