WikiDer > Sequenzbewusstsein
Im Programmiersprachen ist Sequenzbewusstsein oder Listenverständnis ein syntaktisch Konstruktion zu a aufführen notieren. Es basiert auf der mathematischen Notation für Kollektionen. Ein Listenverständnis ist syntethischer Zucker da dasselbe auch mit anderen Sprachkonstrukten erreicht werden kann, wie z Funktionen höherer OrdnungMappe und Filter. Einige Programmiersprachen, in denen man Sequence Awareness verwenden kann, sind Python und Haskell.
Überblick
In der Mathematik kann man eine Menge wie folgt schreiben:
Dies kann wie folgt gelesen werden: "S ist die Menge aller '2 Zeiten" X', wofür gilt das X ein Element ist aus der Sammlung natürliche Zahlen und das X in dem Quadrat größer als 10".
Diese Notation enthält die folgenden Teile:
- : ein Funktion auf jedes der Elemente angewendet.
- : ein Variable die verwendet wird, um die Elemente der Menge darzustellen zu ernennen.
- : eine Sammlung, die als Eingabe dient; daraus werden die Elemente extrahiert, die in der angegebenen Sammlung landen können (vorausgesetzt, das Prädikat ist wahr).
- : ein Prädikat dies muss für die Elemente gelten, die in die Sammlung eingehen (dadurch werden Elemente aus der Eingabesammlung gefiltert).
Beispiel
In dem funktionale ProgrammierspracheHaskell kann das obige geschrieben werden als:
[ 2 * x | x <- [0..], x * x > 10 ]
Dies besagt [0..] für die Liste der natürlichen Zahlen. Das Teil x <- [0..] wird ein Generator erwähnt.
Das obige Listenverständnis kann auch wie folgt geschrieben werden:
Karte (x -> 2 * x) (Filter (x -> x * x > 10) [0..])
Es ist auch möglich, mehrere Generatoren und mehrere Prädikate zu verwenden, wie zum Beispiel:
[ (x, y) | x <- [1..10], x `Bremse` 3 == 0, y <- [1..10], x y == 7 ]
syntethischer Zucker
Listenverständnis ist eine Form von syntethischer Zucker da dieses Konzept auch in bestehenden Sprachkonstrukten ausgedrückt werden kann. Für die Programmiersprache Haskell beschreibt der Haskell 98 Report einen systematischen Weg, Listenverständnisse in bestehende Sprachkonstrukte umzuwandeln, wie z aufgepasst ... bei ... und wenn ... dann ... sonst ....[1]
So wird [ x | x <- [0..], x `Bremse` 2 == 0 ] z.B. umgewandelt in:
let ok x = if x `rem` 2 == 0 then [x] else [] ok _ = []in concatMap ok [0..]
Darin ist Bremse eine Funktion, die sich ausruhen (Englisch: Rest) von a Einteilung ergibt. Die Funktion concatMap ok [0..] ist das gleiche wie concat (Karte ok [0..]), bei welchem Mappe die Funktion Mappe ist und concat ist Verkettung aus einer Liste.
| Quellen, Anmerkungen und/oder Verweise |