간단하게, 이 내용을 작성하는 것은, 자꾸만 주변에서 함수형프로그래밍이 망했던... 패러다임이라는 내용이 오갔던, 내용이 있어서 그에 대한 내용을 작성을 합니다.
요즘 개발자들이 오해를 하는 부분들이 있는데, 함수형프로그래밍이 아주 최신에 만들어진 패러다임이라는 생각이다.
일단 대충 내용이 튜링머신에 대해서 길어지니, 왜 이 내용을 이야기하는 것일까? 우리가 알고 있는 절차형 프로그래밍이 튜링머신과 닮았다고 생각하지 않는가?
현재의 상태를 보관 하고 있는 테이프(상태)에 따라 명령이 실행되는 방식이다. 절차지향형 프로그래밍언어 C라이크 언어들에 대한 내용이다.
자 절차형프로그래밍에 대한 시초는 대충 훑어 보았고, 함수형프로그래밍의 시초를 한 번 살펴보자. 함수형프로그래밍의 방식은 람다대수부터 시작이라고 볼 수 있다. 1930년대 알론조 처치가 수학기초론을 연구하는 과정에서 람다 대수의 형식을 제안하였다. 정확한 년도는 노출되진 않지만, 개정판이 1936년에 나온걸 보면, 1930년 부터 개발하기 시작해서, 만들어진 것 같다.
일단 잠깐만 수학시간이다.
f(x) = x를 만족한다고 생각하자.
그렇다면, f(1) = 1, f(2) = 2이다. 간단한 항등 함수이다.
이걸 잠깐만 자바스크립트의 애로우 펑션으로 작성해보면....
const f = (x) => x
위 처럼 작성할 수 있다. 항등함수를 f(x) -> x 라고 표현을 하고, 람다대수도 표현이 가능 하기에...
λx.x 로 표현 할 수 있다. 이 경우에는 자바스크립트로..
x => x;
표현 가능한건 당연한 이야기이다. 자 내용이 조금 길어졌다.
f(x, y) -> x + y * y * x, 이건 어떻게 표현할까?
(x, y) => x + y * y * x
너무 당연하게도 이와같은 처리가 가능하다.
추가적으로 커링의 개념이다. 람다식은 별도의 return없이 단항인경우, 연산을 리턴하게 된다. 이와 같은 특성을 이용 하면, x, y 두인자의 값을 전달 받을 필요없이.
(x) -> (y) -> x + y * y + x 와 같은 표현도 가능해지게 된다. 이게 커링이라는 개념을 뜻한다.
람다대수로 표현하게 되면,
λx.λy.x+y*y+x가 되게 된다.
함수형 프로그래밍의 역사에대해서 이야기 하고 싶었는데... 람다대수를 사용하고 있다니? 너무 한 것 같지 않은가? 하지만, 함수형 프로그래밍은 저게 다다. 모든 함수형프로그래밍을 지원하는 언어는 위를 지원하지 않으면 말이 되지 않는다, 절차적 프로그래밍언어가 상태에 따라 함수의 실행이 바뀌는 것처럼 말이다.
댓글
댓글 쓰기