먼저 다음과 같은 내용은 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
을 공부하도록 하겠습니다.