List comprehension
Eksempler
Ta alle tall fra 1 - 10 og gang de med 2.
[x*2 | x <- [1..10]]
[2,4,6,8,10,12,14,16,18,20]
Ta alle tall fra 1 - 10 som ganget med 2 er større en 12.
[x*2 | x <- [1..10], x*2 >= 12
[12,14,16,18,20]
Ta alle tall mellom 50 - 100 som mod 7 gir 3
[ x | x <- [50..100], x `mod` 7 == 3]
[52,59,66,73,80,87,94]
Alle tre eksemplene over er hentet fra den anbefalte boken: "Learn you haskell for a great good"
Fordeler med list comrehensions
Det kule med list comprehensions er at vi kan bygge veldig kompliserte sett på en enkel måte. Ved å bruke predikater kan vi erstatte mye logikk / testing som typisk gjøres i if-setninger siden vi begrenser settet til kun de verdiene vi ønsker helt fra starten av. Vi kan konstruere lister på en naturlig måte, litt som vi kjenner det fra mattematikken.
List comprehension i andre språk
List comprehensions er også å finne i mange andre språk, så det er bare å finne sin favoritt: http://en.wikipedia.org/wiki/List_comprehension
Et par eksempler i Python
Vi ønsker å lage en liste med tallene fra 1 - 10.
x = [i for i in range(10)]
Vi ønsker å lage en liste som består av kvadrater, 2^2, 3^3, 4^4 osv. Først gjør vi det på den tradisjonelle måten.
kvadrat = []
for x in range(10):
kvadrat.append(x**2)
Her er hvordan du kan lage den samme kvadratlisten ved å bruke list comprehension.
kvadrat = [x**2 for x in range(10)]
Du kan bruke list comprehensions på alle datatyper og objekter, ikke bare tall.
Python tutorial som handler om list comprehensions: http://www.pythonforbeginners.com/lists/list-comprehensions-in-python/
List comprehensions i python docs: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
Det var kort om list comprehension. Sjekk ut hvordan du kan bruke det i ditt programmeringsspråk slik at du kan gjøre koden din litt mer elegant.