이 장에서 살펴볼 내용은 세가지다


1. 패턴매칭으로 변수에 값 바인딩하기

2. 구조화된 데이터 패턴매칭하기

3. 매칭을 무시할 때 사용하는 언더스코어


엘릭서의 할당문

엘릭서는 할당문이 아니라 assertion으로 동작한다

등호 왼쪽을 오른쪽과 같게 만들 방법이 있다면 실행에 성공한다.


> a = 1

1

> 1 = a

1

> 2 = a

error


첫번째 줄에서 a에 1을 저장했다

두번째 줄에서 a에는 1이 저장되어 있으므로 좌변과 우변이 같아서 매칭에 성공한다

세번째 줄에서 2 = a 를 실행하면 오류가 발생한다 

실행 하려는 코드는 assert(2 = 1)과 같으므로 매칭에 실패해 오류가 발생한다


---


더 복잡한 매칭

배경 지식을 위해 엘릭서의 리스트는 쉼표로 구분된  대괄호 안에 넣어서 만든다

["a", "b", "c"]


이제 매치연산자에 대한 내용으로 돌아오자


> list = [1, 2, 3]

[1, 2, 3]

매칭을 참으로 만들기 위해 list에 [1, 2, 3]이 바인딩되었다

이렇게도 해보자


> list = [1, 2, 3]

[1, 2, 3]

> [a, b, c] = list

[1, 2, 3]

> a

1

> b

2

> c

3


엘릭서는 문법규칙에 따라 좌변과 우변을 같도록 만들 방법을 찾는다

좌변은 변수 세개를 담은 리스트이고 우변은 값 세개로 이루어진 리스트이므로

각 변수마다 위치에 맞는 값을 바인딩한다


이런 과정을 패턴매칭이라고 한다

다른 예제도 살펴보자


> list = [1, 2, [3, 4, 5]]

[1, 2, [3, 4, 5]]

> [a, b, c] = list

[1, 2, [3, 4, 5]]

> a

> 1

> b

> 2

> c

> [3, 4, 5]


이번에는 매칭되지 않는경우를 보자

> list = [1, 2, 3]

> [1, 2, 3]

> [a, 1, b] = list

> error


매칭을 하지않으려면 언더스코어를 쓰면 된다

> list = [1, 2, 3]

> [1, 2, 3]

> [a, _, b] = list

[1, 2, 3]