List Comprehensions
Next: Lambda Ausdrücke
Up: Spezielle Sprachkonstrukte
Previous: Arithmetische Folgen
List comprehension ist eine sehr leistungsfähige Technik
zur Listen-Verarbeitung. Die Grundstruktur von list
comprehension ist:
[ expr | qualifiers ]
wobei qualifiers eine der folgenden drei Formen annehmen kann:
- Generatoren: Ein qualifier der Form pat <- expr
wird benutzt, um aus der Liste expr alle Elemente zu
extrahieren, die dem Pattern pat genügen (in der
Reihenfolge in der sie in expr auftreten). Bsp.:
[x*x | x <- [1 .. 10]] = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
- Filter: Ein Boole'scher Ausdruck als qualifier dient
als Filter:
[ e | condition ] = if condition then [e] else []
- Lokale Definition: Ein qualifier der Form pat = expr
dient zur Definition einer lokalen Variablen. Es
gilt:
[ e | pat = expr ] = [ let pat = expr in e ]
Innerhalb einer list comprehension können mehrere
qualifiers angegeben werden, die jeweils durch ein Komma
getrennt werden müssen.
Beispiele:
[ (x,y) | x <- [1 .. 3], y <- [1 .. 2] ] =
[(1,1), (1,2), (2,1), (2,2), (3,1), (3,2)]
[ (x,y) | x <- [1 .. 3], y <- [1 .. x] ] =
[(1,1), (2,1), (2,2), (3,1), (3,2), (3,3)]
[ x | x <- [1 .. 10] ] = [ 2, 4, 6, 8, 10 ]
[ x | x <- [1,2], x <- [3, 4] ] = [ 3, 4, 3, 4]
[ x | x <- [ [1, 2], [3, 4] ], x <- x ] = [1, 2, 3, 4]
Sven Eric Panitz
Mo., 23. Okt. 1995, 12:31:09