본문 바로가기
프로그래밍/etc. (Language)

Erlang 문법 정리 (2) - 원자, 리스트, 튜플, 패턴 매칭

by _BlankSpace 2018. 3. 14.

1. 원자.


* 얼랭에서는 기호가 원자라는 이름으로 불리고, 항상 소문자로 시작합니다.

* 기호는 무언가를 나타내기 위해서 사용할 수 있고, 더 이상 쪼갤 수 없는 최소한의 값을 말합니다.


1
2
3
4
5
6
> dog.
dog
> pet = cat.
cat
> pet.
cat
cs


위의 예제에서 dog와 cat을 원자라고 할 수 있습니다.


2. 리스트 / 튜플


파이썬이나 여러 언어를 접해본 사람이라면 리스트라는 표현을 많이 들어봤을 것입니다.

리스트는 일반적으로 '비슷한 성질을 가진 객체의 나열' 이라고 정의할 수 있습니다.

Erlang 에서 리스트는 서로 다른 타입을 포함할 수 있고, 크기 제한은 없는 것으로 정해져 있습니다.

또한, 생성한 리스트는 변수에 할당할 수 있습니다.

튜플은 리스트와 비슷한 개념이지만, 길이가 정해져 있다는 것이 차이점 입니다.


1
2
3
4
> {dog, cat, tiger}.
{dog, cat, tiger}
> Animal = [cat, dog].
[cat, dog]
cs


1번째 줄처럼 튜플을 만들 수 있습니다.


3번째 줄을 보면 [cat, dog] 라는 리스트를 Animal이라는 변수에 할당한 것을 볼 수 있습니다.

이런 식으로 리스트를 변수에 할당할 수 있습니다.


3. 패턴 매칭


Erlang에서 패턴매칭이란 변수와 값을 매칭시킨다는 개념입니다.

보통 패턴 매칭은 다음과 같은 상황에 사용합니다.

- 변수에 값을 바인딩하고자 할 때,

- 프로그램을 제어할 때.

- 값을 빼내려고 할 때.


아래의 간단한 예로 패턴 매칭 동작을 설명하겠습니다.

다음과 같은 동물의 정보를 하나 정했습니다.

1
2
> Animal = {animal, {name, "nabi"}, {age, "15"}}.
{animal, {name, "nabi"}, {age, "15"}}
cs


이제, 이름에 Name, 나이에는 Age를 할당하고자 합니다. 그렇다면 매칭은 아래의 모습처럼 진행하면 됩니다.


1
2
3
4
5
6
> {animal, {name, Name}, {age, Age}} = Animal
{person, {name, "nabi"}, {age, "15"}}
> Name.
"nabi"
> Age
"15"
cs


1번째 줄을 보면, 원자 값이 들어간 부분에 Name과 Age라는 변수 처럼 생긴 것들이 대신 들어가 있습니다.

이런 식으로 매칭을 진행하는 데, 이때, 오른쪽 항에는 이전에 작성했던 Animal이라는 변수를 대입합니다.


그럼, 왼쪽에 작성한 매칭 내용에 따라서 Animal 내용을 접근할 수 있습니다.

그 예로, 3번째 줄에서 Name을 출력하면 "nabi"가 나오게 되고, 5번째 줄에서 Age를 출력하면 "15"가 나오게 됩니다.


이해가 안되는 부분이 있으시면, 댓글 남겨주시기 바랍니다.


참고: 브루스 테이트의 세븐 랭귀지


댓글