i

Funktionen höherer Ordnung

Rechnen in unterschiedlichen Notationen

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

Überlege dir geeignete Funktionen und implementiere diese, um mit den folgenden REPL-Ausgaben das Ergebnis $27$ zu erhalten. Verzichte bei der Funktionserstellung erst einmal auf die Signaturdefinitionen.

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

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

(b) Funktion zum Rechnen in der Infix-Notation:

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

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

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

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


Aufgabe 2: Sammlung der 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. Verzichte bei der Funktionserstellung erst einmal auf die Signaturdefinition.

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

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önnte zum Beispiel sein:
"$\text{Rechne mir bitte 14 und 77.5 zusammen.}$"

Ein möglicher erster Schritt zur Verarbeitung des Prompts besteht darin, diesen 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))
   ))

Aufgabe 3: Aus Text eine Funktion extrahieren

Bestehende Datei - listenFunktionen.rkt

(a) Übertrage die Funktion calcPrompt in dein Programm und mache dich mit der Funktionsweise der Funktion vertraut.

(b) Schreibe die Funktion getFunc, um die korrekte Funktionsweise von calcPrompt zu erreichen. Verzichte bei der Funktionserstellung erst einmal auf die Signaturdefinition.

Suche

v
100.137.3.5.1 Funktionen höherer Ordnung
Kopieren durch Anklicken

Rückmeldung geben