프로그래밍 언어/엘릭서

[엘릭서] 2. 패턴매칭

riroan 2022. 4. 26. 08:42

패턴매칭

엘릭서는 = 연산자 부터 다르다.

지금까지 프로그래밍하면서 대입연산자로 사용했는데 엘릭서는 대입연산자로 쓰지 않고 패턴매칭이라는 개념으로 사용한다.

일종의 assert문이라고 한다.

(사실 여기서부터 어질어질했다.)

a=1
list = [1,2,3]
1=a
2=a
[x,y,z] = [1,2,[3,4,5]]

파이썬에서 저 순서대로 실행시킨다면 3, 4번째 줄만 에러가 날 것이다.

하지만 엘릭서는 4번줄만 에러가 난다.

 

=연산자가 하는 일이 대입이 아니라 좌변과 우변을 매칭하는 역할을 하기 때문이다.

 

여기에 두가지 성질이 있다.

1. 변수가 좌변에 있으면 우변의 값을 좌변에 대입한다.

2. 좌변과 우변을 매칭할 수 있는지 확인한다.

 

1번은 프로그래밍에서의 =연산, 2번은 수학에서의 =연산이라고 보면 편하다.

이러한 성질을 기억하며 위의 식을 다시 보자.

 

1번 식은 변수가 좌변에 있으므로 a변수에 1을 대입한다.

2번 식도 변수가 좌변에 있으므로 list변수에 [1,2,3]을 대입한다.

3번 식은 좌변이 변수가 아니므로 좌변과 우변이 매칭되는지 확인한다.

a에 1이 있었으므로 매칭에 성공한다.

4번 식도 매칭을 시도하지만 a에는 1이 있는데 2와 같은지 확인하므로 매칭에 실패한다.

5번 식같은 경우 매칭을 각각 시도하게 된다.

x=1
y=2
z=[3,4,5]

와 같은 뜻이 된다.

 

물론 뜻이 같다는 거지 한 줄에 쓸 때랑 여러줄에 쓸 때랑 동작방식이 다르다.

# 1
[a,a] = [1,2]

# 2
a=1
a=2

이 두 표현을 보자.

1번은 에러가 나고 2번은 에러가 나지 않는다.

한 줄에 매칭할 때는 매칭이 끝나기 전까지 값이 유지되기 때문이다.

즉 1번은 a가 1, 2값을 동시에 가지는 상태가 된다.

반면 2번은 1을 대입하고 2를 대입하기 때문에 문제가 없다.

 

핀 연산자(^)

엘릭서에 특이한 연산자가 하나 있다.

핀 연산자라고 해서 변수 앞에 ^를 붙이면 패턴 매칭시 강제로 변수의 값을 이용해서 매칭을 시도한다.

기본적으로 변수가 좌변에 있을 때 성질 1을 시도하지만 이를 무시하고 성질 2로 시도하게 만드는 것이다.

a=1
a=2
^a=1

위의 경우 세번째 줄에서 에러가 난다.

성질 1을 무시하기 때문에 대입이 일어나지 않고 패턴매칭을 시도하여 2=1과 같은 의미가 되기 때문이다.

 

값 버리기

패턴매칭시 _를 이용하여 값을 버릴 수 있다.

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

이런식으로 사용하며 _를 변수처럼 접근하려고 하면 에러가 난다.

'프로그래밍 언어 > 엘릭서' 카테고리의 다른 글

[엘릭서] 3. 엘릭서 기초  (0) 2022.04.26
[엘릭서] 1. 엘릭서 언어  (0) 2022.04.19