함수형 프로그래밍
위키백과 ― 우리 모두의 백과사전.
함수형 프로그래밍은 프로그래밍 패러다임의 하나로, 계산을 수학적 함수의 조합으로 생각하는 방식을 말한다. 이것은 일반적인 프로그래밍 언어에서 함수가 특정 동작을 수행하는 역할을 담당하는 것과는 반대되는 개념으로, 함수를 수행해도 함수 외부의 값이 변경될 수 없다.
[편집] 역사
알론조 처치가 1930년대에 개발한 람다 대수는 함수에 대한 이론적 기반을 세웠다. 이것은 프로그래밍 언어가 아니라 수학적 추상화였지만, 이것은 함수형 프로그래밍의 근간을 이루었다.
처음으로 만들어진 함수형 프로그래밍 언어는 IPL이었다. 존 매카티가 만든 리스프는 훨씬 향상된 함수형 프로그래밍 언어였고, 이것은 현대적 함수형 프로그래밍의 여러 특징을 가지고 있었다. 리스프를 발전시키고 간단하게 만든 언어로 스킴이라는 것도 나왔다.
1970년대에 로빈 밀너는 ML 프로그래밍 언어를 개발하였고, 데이비드 터너는 미란다 프로그래밍 언어를 개발하였다. ML에 여러 "방언"이 개발되었고, 현재 가장 많이 쓰이는 방언은 OCaml이다.
1980년대에는 그동안의 함수형 프로그래밍에 대한 연구를 바탕으로 하스켈 프로그래밍 언어가 만들어졌다.
[편집] 순수한 함수
순수한 함수란, 부수효과가 없는 함수, 즉, 함수의 실행이 외부에 영향을 끼치지 않는 함수를 뜻한다. 따라서 순수한 함수는 스레드 안전하고, 병렬적인 계산이 가능하다.
다음과 같은 코드에서 f는 순수한 함수라고 하자.
y = f(x) * f(x);
이 때, f가 두 번 중복되는 것을 다음과 같이 최적화할 수 있다.
z = f(x); y = z * z;
이렇게 하면, f(x)를 계산하는 과정이 두 번에서 한 번으로 줄어들지만 두 코드의 결과는 항상 같게 된다.
하지만, f가 순수하지 않은 함수인 경우에는 이러한 방식을 사용할 수 없다. 다음의 코드에서 random이 임의의 값을 주는 함수라고 하자.
y = random() * random();
이 때에는 앞의 random과 뒤의 random의 결과값이 다른, 부작용이 존재하는 함수이다. 따라서, 이 코드는
z = random(); y = z * z;
와는 다른 결과를 갖게 된다. 비슷한 이유로
y = printf("x") * printf("x");
에서 printf가 화면에 글자를 출력하는 함수라면, 이 함수는 부작용을 갖고 있고 따라서 순수하지 않은 함수이다.
이 문서는 컴퓨터에 관한 토막글입니다. 서로의 지식을 모아 알차게 문서를 완성해갑시다. |
분류: 컴퓨터 토막글 | 프로그래밍 패러다임