i

Aufbau von Funktionen

Racket-Dateien

Ab diesem Kapitel werden wir neben der REPL auch im Definitionsfenster arbeiten und eigene Racket-Dateien abspeichern. Über die nächsten Kapitel wirst du immer wieder orangene Boxen finden, diese geben dir an, in welcher Racket-Datei wir arbeiten.

Steht in der Box:

Neue Datei - dateiname.rkt
bedeutet das, dass wir eine neue Datei mit dem angegebenen Namen für die Aufgabe anlegen.

Steht in der Box:

Bestehende Datei - dateiname.rkt
bedeutet das, dass wir in einer vorherigen Aufgabe bereits eine Datei mit dem angegebenen Namen erstellt haben und in dieser weiterarbeiten werden. Merke dir also genau, wo du alle Racket-Dateien abspeicherst, da wir einige Dateien auch über mehrere Kapitel verwenden und Stück für Stück erweitern werden.

Aufgabe 1: Vorbereitung

Neue Datei - streichen_WG.rkt

(a) Öffne eine neue Datei in DrRacket.

(b) Speichere deine Datei unter dem im orangen Kasten angegebenen Namen.
(Lege am besten einen Ordner für alle Racket-Dateien an, sodass du die Dateien bei Bedarf wiederfindest)


Web-Funktion zur Berechnung der Farbkosten in Racket

Im letzten Kapitel haben wir uns mit Funktionen beschäftigt, indem wir in Racket nativ implementierte Funktionen verwendet haben. z.B. die Funktionen remainder, odd?, string-append oder auch +. Was ist aber, wenn wir in Racket Funktionen verwenden wollen, die es so noch nicht gibt?

Nehmen wir die uns bekannte Funktion zur Berechnung der Kosten für eine Farbmenge:

Web-Funktion zu Berechnung der Farbkosten

Kosten in Euro:
Wir können diese Funktion zwar im Web verwenden, aber nicht in unserem Racket-Code. Das lässt sich jedoch ändern!

Aufgabe 2: Die Racket-Funktion kostenFarbmenge

Bestehende Datei - streichen_WG.rkt

Eine (fast korrekte) Möglichkeit, die obige Web-Funktion in Racket zu programmieren, ist der folgende Code:

(: kostenFarbmenge (real -> real))

(define kostenFarbmenge
  (lambda (liter)
    (* liter 6.41)
 ))  

(a) Kopiere den Racket-Code in das Definitionsfenster in DrRacket. Und drücke anschließend oben rechts auf den grünen Startknopf.

(b) Teste in der REPL die beiden Aufrufe und überprüfe, ob diese die gleiche Rückgabe wie unsere Web-Funktion liefern.

> (kostenFarbmenge 9)
> (kostenFarbmenge 17)

(c) Schau dir den Racket-Code genau an. Finde den Ausdruck, der für die falsche Rechnung verantwortlich ist und passe diesen an. Überprüfe anschließend mit der Web-Funktion, ob die Rückgaben übereinstimmen.


Aufgabe 3: Signatur der Racket-Funktion kostenFarbmenge

Bestehende Datei - streichen_WG.rkt

(a) Teste in der REPL die beiden Ausdrücke und überprüfe, ob diese das gleiche Ergebnis wie unsere Web-Funktion liefern.

> (kostenFarbmenge -9)
> (kostenFarbmenge 6.5)

(b) Beschreibe das unterschiedliche Verhalten der Web- und Racket-Funktion. Verwende dabei die Bezeichnungen {Übergabedaten, Rückgabedatum, Datentypen}.

(c) Analysiere den Racket-Code und bestimme, welcher Ausdruck dafür verantwortlich ist, dass die nicht zulässigen Übergabedaten akzeptiert werden.

(d) Passe die in (c) gefundene entsprechende Code-Stelle an. Führe anschließend die beiden in (a) angegebenen Ausdrücke erneut aus.

(e) Verändere den Racket-Code so, dass die Funktion auch bei korrekten Übergabedaten eine Signaturverletzung beim Rückgabedatum liefert. Die Signatur darfst du dafür allerdings nicht verändern!


Aufgabe 4: Fehlermeldungen in Racket

Bestehende Datei - streichen_WG.rkt

Glücklicherweise gibt es für die Farben auch Rabattcodes, die den zu bezahlenden Betrag reduzieren. Eine neue Funktion soll diese mit verrechnen können. Neben der Übergabe der Liter erhält die Funktion auch einen ganzzahligen Prozentwert ≥ 0, der vom Betrag abgezogen wird.

Hierfür verwenden wir den folgenden Racket-Code:

(: kostenFarbmengeMitRabat (natural -> real))

(define kostenFarbmengeRabat
  (lambda (liter rabat)
    (* (* liter 7.4) (- 1 (/ rabatInProzent 100)))
 ))

(a) Übertrage den Racket-Code in deine Datei.

(b) Schau dir den Ausdruck, der die Rückgabe berechnet, an und stelle sicher, dass du verstehst, was dort berechnet wird.

(c) Der Racket-Code enthält noch einige Fehler. Starte den Code mit dem Start-Knopf und löse die Fehler nacheinander. Die Fehlermeldungen von DrRacket geben dir Hinweise darauf, welche Fehler vorliegen.

(d) Rufe die Funktion mit geeigneten Ausdrücken aus und überprüfe, ob korrekte Rückgabewerte erzeugt werden.

Suche

v
100.137.1.3.1 Aufbau von Funktionen
Kopieren durch Anklicken

Rückmeldung geben