함수형언어란?
C, Java, Pascal, Ada등의 언어는 명령형 언어이다. 이들 언어는 순차적으로 실행되는 명령어들의 나열로 구성된다는 뜻에서 명령형이라고 불리고 있다.
Haskell은 함수형언어이다. 함수형 프로그램은 단 1개의 식으로부터 이루어지고, 이들을 평가(실행)함으로서 프로그램이 실행되게 된다. 스프레드쉬트를 사용해본 적이 있는 사람은 함수형언어를 경험해 보았다고 할 수 있다. 스프레드쉬트에서는 각 셀의 값을 다른 셀의 값을 기준으로 결정한다. 여기서 눈여겨 보아야 할 부분은, '무엇을 계산하는가'이며, '어떻게 계산하는가'가 아니다. 예를 들면,
.셀이 계산되는 순서는 지정되어있지 않다.-그 대신에 스프레드쉬트가 각각의 셀의 의존성에 대해서 계산해 줄것이라는 생각이 있다(함수형언어는 계산순서를 프로그래머가 결정하지 않고 무엇을 계산할 것인가만을 결정한다는 뜻으로 풀이됨)
.스프레드쉬트 소프트웨어가 메모리를 어떻게 사용하는지를 결정하지 않는다.-오히려 스프레드쉬트가 겉보기에는 무한한 셀이 있는 것으로 보이며, 메모리는 실제로 사용될 때 비로서 할당된다.
.거의 대부분의 경우, 각 셀의 값은, 그 값을 계산하기 위한 명령어의 나열이 아닌, 단 1개의 식으로 정해진다.
이 스프레드쉬트 소프트웨어에 있어서의 계산의 순서가 지정되지 않는 점에서, (변수에의) 대입이라는 개념이 그다지 도움이 되지 않는 다는 것이 흥미로운 점이다. 만약 대입이 언제 일어날지 모른다면, 대입을 유용하게 이용할 수 없다. 이러한 점은 기본적으로 대입문을 신중하게 나열해서 계산을 구성해가는 C언어나 메소드의 호출이 중요한 Java와 같은 관습적인 언어와는 비교가 된다.
저차원적인 '어떻게 (계산하는가?)'가 아닌 고차원적인 '무엇(을 계산하는가?)'에 촛점을 두는 것이 함수형언어가 다른 언어와 다른 가장 커다란 차이점이 된다.
다른 잘 알려진 함수형언어에 가까운 언어로는, 표준 데이터베이스 쿼리언어인 SQL인 있다. SQL의 쿼리는 투사, 선택, 결합등을 포함한 식이 된다. 쿼리는 어떤 관계가 계산될 것인가를 기술하며, 어떻게 계산할 것인가를 기술하지는 않는다. 물론 쿼리는 어떠한 순서로 평가(실행)이 되어도 상관이 없다. SQL이 장착된 소프트웨어의 대부분은 최대한 최적의 실행을 탐색하는 것으로 쿼리의 최적화를 이루어낸다.
(Continue...)
Tuesday, May 12, 2009
Subscribe to:
Post Comments (Atom)

No comments:
Post a Comment