Der filter-Operator
Punkte aus einer Punktliste herausfiltern
Die Animation zeigt ein Polygon, das mit Hilfe einer Punktliste festgelegt ist.
Zum Herunterladen: spiegeln_xachse.ggb
Aufgabe 1
(a) Ändere die blau dargestellte Punktliste so ab, dass darin nur noch die Punkte aus der rot dargestellten Punktliste vorkommen, die oberhalb der x-Achse liegen.
(b) Beschreibe allgemein, wie man bei einem Punkt $P(x|y)$ entscheidet, ob er oberhalb der x-Achse liegt.
Das Filtern einer Punktliste automatisieren
Die Abbildung verdeutlicht eine Situation, in der eine Bedingung für alle Punkte aus einer Punktliste ausgewertet wird. Jeder Punkt der Punktliste wird mit derselben boolschen Funktion verarbeitet.
Mit dem filter
-Operator kann man alle Elemente einer Liste herausfiltern, die eine mit einer boolschen Funktion beschriebene Bedingung erfüllen.
Der Filter
-Operator erhält als Übergaben zuerst die Bedingung als boolsche Funktion (hier die Funktion ueberxAchsePunkt
)
und dann die zu verarbeitende Liste (hier eine Punktliste).
Hier eine erste Implementierung in Elm:
module Polygone exposing (..)
type alias Punkt = ( Float, Float )
type alias Punktliste = List Punkt
punktliste2: Punktliste
punktliste2 = [(-40,60),(0,-30),(40,-20),(60,0)]
ueberxAchsePunktliste: Punktliste -> Punktliste
ueberxAchsePunktliste punktliste =
let
ueberxAchsePunkt (x,y) = (y > 0)
in
List.filter ueberxAchsePunkt punktliste
> import Polygone exposing (..)
> ueberxAchsePunktliste punktliste2
[(-40,60)] : Punktliste
Die Verarbeitungsfunktion kann man auch als Zuordnung darstellen, wenn man die Klammerung (\ ... )
verwendet.
ueberxAchsePunktliste: Punktliste -> Punktliste
ueberxAchsePunktliste punktliste =
let
ueberxAchsePunkt = (\ (x,y) -> (y > 0) )
in
List.filter ueberxAchsePunkt punktliste
Die Zuordnung (\ (x,y) -> (y > 0))
lässt sich dann auch direkt als anonyme Funktion (d.h. als Funktion ohne Funktionsname) als
Parameter des map
-Operators verwenden.
ueberxAchsePunktliste: Punktliste -> Punktliste
ueberxAchsePunktliste punktliste =
List.filter (\ (x,y) -> (y > 0) ) punktliste
Aufgabe 2
Teste selbst alle hier vorgestellten Versionen.
Aufgabe 3
(a) Entwickle analog eine Funktion unterxAchsePunktliste
, mit der alle Punkte einer Punktliste herausgefiltert werden, die unterhalt der x-Achse liegen.
(b) Entwickle eine Funktion ersterQuadrantPunktliste
, mit der alle Punkte einer Punktliste herausgefiltert werden, die im 1. Quadranten
des Koordinatensystems liegen (d.h. die x- und y-Koordinaten sind beide positiv).
Quellen
- [1]: Bedingung auswerten - Urheber: KB - Lizenz: inf-schule.de
- [2]: map-Operator verwenden - Urheber: KB - Lizenz: inf-schule.de