List comprehension
List comprehension (em português, compreensão de lista) é um construtor de processamento de listas em linguagem de programação. A notação matemática pode ser percebida através do seguinte exemplo e é muito semelhante àquela usada na teoria dos conjuntos para definir um conjunto:
Como pode-se perceber, S é uma lista formada por todos os números
que pertencem ao ao conjunto dos Naturais, tal que
. Em linguagem Haskell, por exemplo, a sintaxe das lista de compreensão poderia ser escrita da forma:
S = [ x | x←[0..], x^2>3 ]
onde, na lista, [0..] representa N, e x^2>3 representa a condição..
As primeias referências encontradas em linguagens sobre a notação de lista de compreensão foram por Rod Burstall e John Darlingtons em 1977 na NPL, mas já havia construtores similares na SETL.
Formas de list comprehension [editar]
Em Haskell, list comprehensions podem ser também escritas com funções de alto-nível como map e filter. No mesmo acima, a notação S pode ser escrita como:
S = filter (\x → x^2 > 3) [0..]
Em Python também há o conceito de list comprehensions. Um esboço da notação S:
L = range(100) # listas em Python são finitas, esta lista é de 0 a 99 S = [x for x in L if x**2 > 3]
O generator foi introduzido a partir do Python 2.4. Então a notação S usando geradores para iterar listas infinitas pode ser:
from itertools import count S = (x for x in count() if x**2 > 3)
Ver também [editar]
- Generator é outro exemplo de processamento de valores.
- Design pattern de software
Referências [editar]
- List Comprehension no Dicionário Livre de Computação, Editor Denis Howe.
- Philip Wadler [1] Comprehensions.
- Haskell
- The Haskell 98 Report, chapter 3.11 List Comprehensions.
- The Glorious Glasgow Haskell Compilation System User's Guide, chapter 7.3.4 Parallel List Comprehensions.
- The Hugs 98 User's Guide, chapter 5.1.2 Parallel list comprehensions (a.k.a. zip-comprehensions).
- Python
- Python Reference Manual, capítulo 5.2.4 List displays.
- PEP 202: List Comprehensions
- Python Reference Manual, chapter 5.2.5 Generator expressions.
- PEP 289: Generator Expressions
- Common Lisp
- Axiom
