i

Funktionen höherer Ordnung

Rechnen in unterschiedlichen Darstellungen Präfix, Infix, Postfix-Darstellung

Eine Professorin möchte ihren Studierenden unterschiedliche Notationen mathematischer Ausdrücke beibringen. Dabei geht es ihr um folgende Notationen:

  • Präfix-Notation: (+ 13  24)
  • Infix-Notation: (13 + 24)
  • Postfix-Notation: (13  24 +)

Um die Gleichwertigkeit der Notationen darzustellen, sollen die Studierenden die Möglichkeit bekommen alle drei Notationen in Racket anzuwenden.

Aufgabe 1: Spezifische Notationsfunktionen

Bestehende Datei - listenFunktionen.rkt

Schreibe geeignete Funktionen, um mit den folgenden REPL-Ausgaben das Ergebnis 27 zu erhalten:

(a) Funktion zum Rechnen in der Präfix-Notation

> (prefix + 13 24)
> (prefix / 54 2)
Racket

(b) Funktion zum Rechnen in der Infix-Notation

> (infix 13 + 24)
> (infix 9 * 3)
Racket

(c) Funktion zum Rechnen in der Präfix-Notation

> (postfix 13 24 +)
> (postfix 100 73 -)
Racket

(d) Entwerfe einen geeigneten Ausdruck der sowohl prefix, infix als auch postifx verwendet und das Ergebnis 27 liefert.


Aufgabe 2: Notationen in einer Funktion

Bestehende Datei - listenFunktionen.rkt

(a) Eine weitere Funktion soll unabhängig von dem angewandten Notationsstil eine Rechnung ausführen können. Entwerfe die Funktion rechnen die die folgenden Ausdrücke zulässt:

> (rechnen * 9 3)
> (rechnen 100 - 73)
> (rechnen 54 2 /)
Racket

(b) Die Funktion soll nicht mehr nur für Rechenaufgaben genutzt werden können, sondern auf beliebige Operatoren-Operanden-Kombinationen. Verfeinere deine Funktion dahin, dass die Funktion op die folgenden Ausdrücke zulässt:

> (op >  12.6 12.7)
> (op #t or #f)
> (op  "Hallo" "Hola" string=?)
Racket

Rechnen mit KI-Chatbots

Das chatten mit KI-Chatbots wird immer beliebter, so auch die Verwendung der Chatbots zum Lösen von Rechenaufgaben. Nutzende geben die Aufgaben häufig als ein Prompt in natürlicher Sprache ein. Ein solcher Prompt könnten zum Beispiel sein:
"Rechne mir bitte 14 und 77.5 zusammen."

Ein möglicher erster Schritt zur Verarbeitung besteht darin den Prompt in eine Liste von Wörtern aufzuteilen:
(list "Rechne" "mir" "bitte" "14" "und" "77.5" "zusammen.")

In einem zweiten Schritt würde die Liste auf die für die Rechnung relevanten Informationen reduziert werden:
(list "14" "und" "77.5")

Nun muss diese Information nur noch in einen ausführbaren Ausdruck umgewandelt werden. Die Funktion calcPrompt soll diese Aufgabe erfüllen:

;Bekommt eine Rechnung als Liste aus Strings übergeben und berechnet das Ergebnis
(: calcPrompt ((list-of string) -> real))
(check-expect (calcPrompt (list "14" "und" "77.5")) 91.5)
(check-expect (calcPrompt (list "123" "+" "216")) 339)
(check-expect (calcPrompt (list "7" "mal" "7")) 49)
(check-expect (calcPrompt (list "14" "durch" "5")) 2.8)
(define calcPrompt
  (lambda (s)
    (define a (first s))
    (define b (first (rest s)))
    (define c (first (rest (rest s))))
    ((getFunc b) (string->number a) (string->number c))
   ))
Racket

Aufgabe 3: Aus Text eine Funktion extrahieren

Bestehende Datei - listenFunktionen.rkt

(a) Mache dich mit der gewünschten Funktionsweise der Funktion calcPrompt vertraut und übertrage diese in dein Programm.

(b) Schreibe die Funktion getFunc, um die korrekte Funktionsweise des Programmes sicherzustellen.

Suche

100.137.3.5.1Funktionen höherer Ordnung
Kopieren durch Anklicken

Rückmeldung geben