2007년 08월 25일
[erlang] list comprehensions
리스트의 원소를 나열하거나 일반적인 리스트들로부터 map등의 함수를 사용하여 원하는 리스트를 조합해낼수 있지만, 식으로 리스트를 나타내는 방법을 말합니다.(그간 리스트를 표현하던 방법이 원소나열법이라면 리스트 표현식은 조건제시법이겠죠?)
1에서 5까지의 제곱을 구하는 식은 간단히 표현해볼 수 있습니다.
<code>
> [ X * X || X <- [1,2,3,4,5]].
...
</code>
일반적인 리스트표현식과 같이 사각괄호를 사용합니다. 하지만 조금 다른 점은 '||'을 기준으로 오른편에는 원본요소들의 나열과 각 바인딩을 보여주고, 좌변에는 그 원소를 표현하는 방법을 적어줍니다.
<code>
> T = [{48, 21}, {383,28}, {42, 7}].
> [ X * Y || {X, Y} <- T]. %% 리스트내의 각 튜플의 곱.
...
> [ X || {X, _} <- T]. %% 각 튜플의 첫번째만 구하기.
...
</code>
눈치채신분들도 계시겟지만 '||'의 우변에서 패턴매칭과 같은 규칙을 사용하여 이를 표현할 수 있음을 알 수 있습니다. 이를 응용하면 다음과 같은 것들로 응용할수도 있습니다.
<code>
> U = [{apples, 4}, {oranges, 9}, {apples, 2}, {pears, 1}, {oranges, 11}].
...
> [ N || {apples, N} <- U ].
[4, 2]
...
</code>
패턴매칭과 같이 매칭되는 요소들만 골라서 선택할 수 있습니다. 좀 더 세밀하게 조건을 부여하는 방법도 있습니다.
<code>
> [ N || {F, N} <- U, F == pears ].
[1]
...
</code>
우변의 끝에 ','뒤에 조건을 추가하여 이에 부합하는 요소들만 골라내는 방법으로 이용할 수 있습니다. 단순히 패턴매칭으로 나타내기 힘든 경우에 이를 적용할 수 있습니다.
1에서 5까지의 제곱을 구하는 식은 간단히 표현해볼 수 있습니다.
<code>
> [ X * X || X <- [1,2,3,4,5]].
...
</code>
일반적인 리스트표현식과 같이 사각괄호를 사용합니다. 하지만 조금 다른 점은 '||'을 기준으로 오른편에는 원본요소들의 나열과 각 바인딩을 보여주고, 좌변에는 그 원소를 표현하는 방법을 적어줍니다.
<code>
> T = [{48, 21}, {383,28}, {42, 7}].
> [ X * Y || {X, Y} <- T]. %% 리스트내의 각 튜플의 곱.
...
> [ X || {X, _} <- T]. %% 각 튜플의 첫번째만 구하기.
...
</code>
눈치채신분들도 계시겟지만 '||'의 우변에서 패턴매칭과 같은 규칙을 사용하여 이를 표현할 수 있음을 알 수 있습니다. 이를 응용하면 다음과 같은 것들로 응용할수도 있습니다.
<code>
> U = [{apples, 4}, {oranges, 9}, {apples, 2}, {pears, 1}, {oranges, 11}].
...
> [ N || {apples, N} <- U ].
[4, 2]
...
</code>
패턴매칭과 같이 매칭되는 요소들만 골라서 선택할 수 있습니다. 좀 더 세밀하게 조건을 부여하는 방법도 있습니다.
<code>
> [ N || {F, N} <- U, F == pears ].
[1]
...
</code>
우변의 끝에 ','뒤에 조건을 추가하여 이에 부합하는 요소들만 골라내는 방법으로 이용할 수 있습니다. 단순히 패턴매칭으로 나타내기 힘든 경우에 이를 적용할 수 있습니다.
# by | 2007/08/25 01:37 | erlang -- nine 9's | 트랙백 | 덧글(2)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]