i

Funktionsdefinitionen in Racket

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 angegeben 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 angegeben 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 angegeben Namen.
(Lege am besten ein 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 Kosten für eine Farbmenge

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 Start-Knopf.

(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) Analysiere den Racket-Code und bestimme welcher Ausdruck dafür verantwortlich ist, dass die nicht zulässigen Übergabedaten akzeptiert werden.

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

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

Expertenaufgabe

(e) Verändere den Racket-Code so, dass die Funktion auch bei korrekten Übergabedaten eine Signaturverletzungen 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 den Farbcode auch Rabattcodes, die den zu bezahlenden Betrag reduzieren. Eine neue Funktion soll dies auch 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.2.3.1 Funktionsdefinitionen in Racket
Kopieren durch Anklicken

Rückmeldung geben