i

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.

Bedingung auswerten[1]

Mit dem filter-Operator kann man alle Elemente einer Liste herausfiltern, die eine mit einer boolschen Funktion beschriebene Bedingung erfüllen.

map-Operator verwenden[2]

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

Suche

v
110.2.10.1.1.2
inf-schule.de/fp_elm_alteversion/elm_programme/listenoperatoren/polygone/lernstrecke/filter
inf-schule.de/110.2.10.1.1.2
inf-schule.de/@/page/Nc9gcuXqDBF8ZJB0

Rückmeldung geben