패턴 매칭

패턴 매칭을 처음 접했을 때엔 파이썬의 언패킹과 비슷한 느낌을 받았다.

	x, y, z = [1, 2, 3]  # 파이썬의 언패킹

하지만 엘릭서의 패턴 매칭의 경우 더 심오한 개념이라고 느껴지는데

a = 1
1 = a # 매치 성공
2 = a # 매치 에러

위 코드를 보면 순서대로 a에 1을 할당한 것이라 보면 되고, 1 = a는 기존의 이해로는 맞지 않는 문법이겠지만 엘릭서에서는 좌변에 상수 우변의 변수가 있을 때 매칭을 하는 의미가 된다.

고로 1 = a 인데 a가 1이 할당되어 있으므로 매칭에 성공한 것이고, 마지막 코드는 2 = a에서 a는 1 이므로 매치 에러가 발생하게 된다.

리스트의 패턴 매칭의 경우

list = [1, 2, 3]
[a, b, c] = list

의 경우 a = 1, b = 2, c = 3이 할당된다.

만약 아래의 매칭을 실행한 경우

[a, 1, c] = [4, 1, 2] # 패턴 매칭 성공
[a, 1, c] = [1, 2, 3] # 패턴 매칭 실패

당연해 보이지만, 첫번째 코드는 a = 4, 1 = 1(매칭 성공), c = 3로 매칭에 성공하지만, 두번째 코드는 a = 1, 1 = 2(매칭 실패)로 인해 패턴 매칭에 실패한다.

더 복잡한 패턴 매칭의 경우

list = [1, 2, [3, 4, 5]]
[a, b, c] = list

# a = 1
# b = 2
# c = [3, 4, 5]

언더스코어(_)로 패턴 매칭의 값을 무시할 수 있는데 변수처럼 동작하지만 값은 바로 버리게 되어 와일드카드로 사용할 수 있다.

[1, _, _] = [1, 2, 3]