Functional Programming - Introduction

먼저 다음과 같은 내용은 edx 강의 중 DelftX: FP101x Introduction to Functional Programming을 보고 작성하였습니다.

Introduction

Functional Programming 의 정의는 간략하게 말하기에는 다소 어렵고 다양하게 해석될 수 있습니다. 아주 단순하게 말하자면 수학 함수(Mathematical function)를 사용하는 프로그램을 의미합니다. Haskell과 같은 몇몇 프로그래밍 언어 뿐만아니라 많은 언어들이 이러한 부분들을 지향하고 있습니다. 여기서는 간단히 다음과 같이 정의할 수 있습니다.

Functional Programming : Statement 보다 Expression을 위주로 작성하는 프로그래밍 기법(Style). 따라서 개발하는 프로그램이 Expression으로 구성되게 코딩하는 것.

Statement는 다른 global state에 영향을 미칠 수 있습니다. 다음 예를 보면서 확인하겠습니다.

int total = 0;  
for (int i = 1; i <= 10; ++i) {  
    total = total + 1;
}

위의 예는 명령형 프로그래밍 기법(Style)로 작성된 것을 확인 할 수 있습니다. 변수(Variable)이 초기화되고 흐름에 따라 변화되고 있습니다. Haskell에서는 다음과 같은 두가지 expression으로 표현합니다.

sum [1..10]  

한가지는 1부터 10까지 list를 만드는 것이고, 다른 하나는 그런 list를 합치는 것 입니다. 이렇게 expression을 통해 구현하는 것이 Functional Programming입니다.

A Taste of Haskell

Haskell로 QuickSort를 구현한 예제입니다.

f []    = []  
f (x:xs)= f ys ++ [x] ++ f zs  
                where
                    ys = [ a | a <- xs, a <= x]
                    zs = [b | b <- xs, b > x]

기존 명령형 프로그래밍을 통해 구현된 QuickSort를 이와 같이 두개의 list(ys, zs)를 이용하여 구현하지 않습니다. 재귀를 통해 입력된 list를 정렬하게 됩니다. 이 예제는 다소 추상적이지만 명령형 프로그래밍, 예를 들어 C/C++을 통해 QuickSort를 구현해온 저에게는 굉장히 단순해 보입니다.

다음부터 Haskell을 통해 Functional Programming 을 공부하도록 하겠습니다.

Reference

comments powered by Disqus