[Haskell] 리스트 컴프리헨션(comprehension)
리스트 컴프리헨션은 리스트를 효과적으로 가공해서 다시 리스트를 완성할 수 있게 해주는 멋진 녀석이다.
컴프리헨션은 기본적으로 아래의 구조를 지닌다.
[ 요소표현식 | 요소정의 ]
왼쪽의 표현식에선, 전달받은 리스트의 개별 요소를 어떻게 처리할건지를 명시한다. 그리고 이 표현식은 각각 하나의 요소가 된다.
오른쪽 정의식에선, 왼쪽에서 순회할 리스트를 주입한다.
아래 코드는 컴프리헨션으로 리스트를 생성하는 간단한 예제다.

1..8의 리스트를 생성해서 주입하도록 했다.
근데 왼쪽에선 그냥 그대로 i만 반환하니, 이걸 쓰는 의미가 없어보인다.
각 요소에 2를 곱하도록 했다.


필터링
원한다면 특정 조건에 맞는 요소만 전달되도록 할 수 있다. 그냥 주입식 다음 인자로 조건식을 전달하면 된다!
아래 코드는 홀수만 넘어가도록 odd 함수를 적용한 예시다.


if-then-else로 분기 처리를 해도 되고


다중순회
위에선 컴프리헨션의 순회 인자로 i 하나만을 줬지만, 원하는만큼 더 줄 수도 있다.
그러면 각각의 모든 조합을 창출해낸다.

i의 0에서 j번 돌고, i의 1에서 j번 돌고, i의 2에서 j번 도는 그런식이다.