리스트 컴프리헨션(list comprehensions)을 사용하면 아래 개념을 쉽게 사용할 수 있다.
예를 들어 아래 표현은 리스트 xs
원소의 제곱을 나타낸다.
[ x*x | x <- xs]
아래 표현은 숫자 n
의 약수를 나타낸다.
[ f | f <- [1..n], n `mod` f == 0 ]
아래처럼 함수 concatMap
을 리스트 컴프리헨션으로 구현할 수 있다.
concatMap :: (a -> [b]) -> [a] -> [b]
concatMap f xs = [y | x <- xs, y <- f x ]
리스트 컴프리헨션은 John Darlington이 학생일 때 처음 제시했다.
1981년에 David Turner가 프로그래밍 언어 KRC에서 사용하면서 유명해졌고 이때는 "ZF expression"이라고 불렀다.
1985년에 Wadler가 그의 논문에서 "list comprehension"이라는 용어를 사용했다.
리스트 컴프리헨션은 주로 아래와 같은 함수형 언어들에서 주로 사용한다.
아직은 아니지만 Javascript에도 array comprehensions라는 이름으로 이 기능을 도입할 예정이다.