[Haskell] (1) 함수형 언어

·2023년 10월 5일
0

Haskell

목록 보기
1/1

Haskell은 무엇인가?

Haskell은 함수형 프로그래밍 언어의 일종이다. 나도 19년 2학기에 PL과목을 들으면서 알게 된 언어이고, 처음 봤을 때 적잖이 당황한 기억이 있다. 조금 쉽지 않은 개념인데, 우리가 일반적으로 쓰는 프로그래밍 언어는 C 같은 절차적 언어, JAVA와 같은 객체 지향 언어가 대부분이다. 하지만, 함수형 프로그래밍 언어는 선언형 언어의 한 갈래라고 할 수 있다. 함수형 언어는 프로그램을 하나의 함수로서 바라보고 프로그램을 작성하는 방법이다. 예를 들어 한 변의 길이가 x인 정사각형의 넓이를 구하는 함수를 작성한다고 하자. 그렇다면 다음과 같이 함수를 정의할 수 있다.

square(x) = x*x

이렇게 식을 작성하는 것을 function definition 이라고 한다. 그렇다면 이를 어떻게 사용하는가? 함수를 작성했으면 x에 값을 넣어야한다. 예를 들어 길이가 4인 정사각형의 넓이를 계산한다고 해보자. 그러면 다음과 같이 식에 4를 적용하면 된다.

y = square(4) = 4*4 = 16

함수형 언어의 특징

이러한 함수형 언어에는 특징이 몇가지 있다.

1. 함수형 언어에는 변수의 개념이 없다.

2. 함수형 언어에는 Assignment의 개념이 없다. 즉 다음과 같은 식은 허용되지 않는다.

x = x + 1

3. Loop의 개념이 없다. 대신 Recursion을 이용해 Loop의 역할을 수행한다.

Loop의 개념이 없다면 반복문을 어떻게 사용할 수 있을까? 최대공약수를 구하는 두 프로그램의 예시를 살펴보자.

먼저, 파이썬에서 이를 구현한다면, while문을 이용해 반복문을 작성할 수 있다.

def gcd1(int n, int m):
	while (m != 0):
    	t = n % m
        n = m
        m = t
    return n

하지만, 함수형 언어에서는 이러한 loop가 허용되지 않기 때문에, recursion을 사용한다. 앞선 프로그램을 recursive하게 정의해보자.

def gcd2(int n, int m):
    if (m == 0):
        return n
    else:
        return gcd2(m, n % m)

이렇게 return값이 스스로의 함수를 호출하는 것을 Recursion이라고 하며, 기본적으로 loop와 똑같은 반복문의 효과를 가진다.

profile
세상에 호기심 많은 개발자

0개의 댓글