i

Übungen: Funktionen höherer Ordnung

Aufgabe 1: Listenanalyse

Bestehende Datei - listenFunktionen.rkt

In dieser Aufgabe möchten wir einige gängige Funktionen zur Analyse von Listen implementieren. Hierfür betrachten wir eine Liste mit den Minutenangaben von 200 Marathon-Laufzeiten.

(define marathon-zeiten
  (list 274 259 241 266 277 252 254 262 238 249 270 281 263 245 230 287 268 260 255 242
  271 285 250 276 296 237 272 240 263 278 261 221 244 257 235 269 311 264 228 246 326 253 267 289 236 248 280 251 265 258 222 293 262 247 268 272 241 288 255 260
  298 229 232 273 245 250 217 266 270 239 305 255 263 275 226 243 272 249 265 259 223 256 234 299 279 284 262 243 254 275 276 297 220 289 278 248 226 260 286 271
  252 308 246 259 273 233 278 263 236 295 274 261 225 241 267 255 283 258 218 300 310 259 272 235 242 276 257 244 293 264 241 221 273 247 263 262 280 245 268 239
  299 237 250 222 295 234 272 267 258 261 226 306 248 275 282 264 241 252 257 266 229 273 214 260 238 285 271 255 262 246 233 268 247 289 254 230 277 265 240 226
  236 311 269 248 250 278 223 289 258 275 342 332 339 145 154 138 143 347 334 136 342 331 325 146 152 156 340 336 344 160))
Zur Analyse der Marathon-Laufzeiten sollen die folgenden drei Funktionen implementiert werden.
  • count-if: Gibt zurück, wie viele Elemente einer Liste eine Bedingung erfüllen.
  • all?: Prüft, ob alle Elemente einer Liste eine Bedingung erfüllen.
  • any?: Prüft, ob mindestens ein Element einer Liste eine Bedingung erfüllt.

(a) Implementiere die Funktion count-if.
Bestimme anschließend, wie viele Personen den Marathon in unter 3 Stunden gelaufen sind und wie viele in über 4 Stunden.

(b) Implementiere die Funktion all?.
Überprüfe anschließend, ob alle Personen den Marathon in unter 6, 5:30 oder 5 Stunden gelaufen sind.

(c) Implementiere die Funktion any?.
Überprüfe anschließend, ob es eine Person gibt, die den Marathon in unter 2:15 gelaufen ist.

Aufgabe 2: Funktionskomposition

Bestehende Datei - listenFunktionen.rkt

Eine weiter gängige Funktion höherer Ordnung ist die Funktion compose. Diese Funktion erstellt aus zwei Funktionen eine neue Funktion. Beim Aufruf der neuen Funktion werden die beiden ursprünglichen Funktionen in der Weise angewandt, dass zunächst die zweite Funktion auf die Übergabedaten angewendet wird und anschließend das Ergebnis dieser Anwendung an die erste Funktion übergeben wird.

Mathematisch betrachtet stellt dies eine Komposition zweier Funktionen $f$ und $g$ dar:
$(f \circ g) (x) = f(g(x))$

Zwei Beispiele für die Nutzung der Funktion in Racket sind die folgenden:

;Funktion, die zuerst den Betrag einer Zahl bestimmt und diesen anschließend rundet
(define betrag-runden
  (compose round abs))

(betrag-runden -4.7)
;Gewünschtes Ergebnis: 5  
;Funktion, die eine Zahl zuerst quadriert und diesen anschließend um eins erhöht
(define quadrat-plus-eins
  (compose (lambda (x) (+ x 1)) (lambda (x) (* x x))))

(quadrat-plus-eins 3)
;Gewünschtes Ergebnis: 10  

(a) Implementiere die Funktion compose. Diese erhält zwei Funktionen als Übergabedaten und gibt die Komposition der Funktion wiederum als Funktion zurück. Überprüfe deine Implementation anhand der obigen Beispiele.

Suche

v
100.137.3.5.1.3 Übungen: Funktionen höherer Ordnung
Kopieren durch Anklicken

Rückmeldung geben