2015-01-17 3 views
1

저는 기능적 프로그래밍에 관한 첫 수업을 듣고 있습니다. 나는 내가 무엇을 얻고 있는지 전혀 몰랐다. 하지만 이미 함수형 프로그래밍 언어가 명령형 언어로 알려진 다른 범주의 언어와 구별된다는 것을 알게되었습니다. 나는 C와 C++을 모은다.함수형 프로그래밍 언어가 할 수있는 일은 불가능합니까?

프로그래밍 언어를 배우는 것은 분명히 시간과 노력이 필요합니다. 지금까지 필자는 명령형 언어가 기능적 언어와 비교하여 어떤 제한점이 있음을 나타내는 어떤 것도 보지 못했습니다.

내 질문 :

는 함수형 프로그래밍 언어는 모든 프로그래머들이 널리 유용하게 혜택을 제공합니까?

+0

가능한 복제본 : http://stackoverflow.com/questions/36504/why-functional-languages – LeleDumbo

답변

4

실제로는 다른 방법입니다. 기능 언어는 제한이있는 언어입니다. 그리고 이 제한은 대단히 가치있는 기능입니다.. 순전히 기능적 언어 (또는 순수하게 기능적 인 언어의 서브 세트)로 작업 할 때, 프로그램이 부작용을 가질 수있는 능력을 잃어 버리지 만, 이것은 더 높은 수준의 추상화에서 강력한 능력을 제공합니다 : 순전히 기능적인 프로그램은 더 쉽습니다 ~ 이유는 약보다 쉽고 은 더 큰 시스템으로을 결합합니다. - 소프트웨어가 설계가 반드시 예상하지 않는 방법으로 모듈로 분리와 재결합 할 수있는 특성

  • Modularity : 이러한 혜택은 광범위하게 (실제로 동전의 양면입니다) 두 가지 범주로 분류된다.
  • Compositionality - 예측 가능한 법칙에 따라 소프트웨어 구성 요소를 결합 할 수있는 속성. 따라서 구성 요소를 이해하고 구성 법칙을 이해하면 전체 소프트웨어 시스템을 이해할 수 있습니다. 언어 인 경우

또한, 강력한 형식의 하나 (예 : 하스켈 등), 당신은 부작용을 소개하고 이러한 능력을 상실하지 않을 것을 보장 정적 수 있습니다 컴파일러.

언어가 total functional programming 인 경우 언어는 보다 작을 수 있습니다.입니다. 즉, 이러한 언어는 일반적인 재귀 또는 무한 반복을 지원하지 않습니다. 그러나 컴파일러가 프로그램이 충돌하거나 중단되지 않도록 보장 할 수있는 능력을 얻을 수 있습니다. 일반 재귀 또는 반복을 사용하는 명령형 언어 can never give you this guarantee.

0

예.

f (print 5) 

f의 인수는 문자 그대로 문 print 5입니다 : 순수 함수형 언어에서, 당신은 말할 수있다 (물론 실행 코드 ---하지 문자열로 컴파일!). 명령형 언어의 경우 동일한 표현식이 일 때print 5 --- 숫자 인쇄 -를 실행 한 다음 '결과 :'을 f으로 전달합니다.그래서이 기능 : 완벽하게 합리적인 하스켈 기능입니다

do_three_times a = do 
    a 
    a 
    a 

는 다음과 같이 호출 할 수 있습니다

do_three_times (print 5) 

가 5 번 세 번 인쇄; 명령형 언어에서는 정확히 비슷한 기능을 쓸 수 없습니다. (당신이 얻을 수있는 가장 가까운 것은 제로 - 아규먼트 (zero-argument) 기능을 가진 춤이다. 그것은 명령형 언어를 사용하는 사람들이 그것을 사용하는 것을 꺼려한다.)

명령형 언어에서는 구조화 된 루프 구문을 언어에 내장해야하므로 작고 고정 된 목록이 있어야합니다. 순전히 기능적인 언어에서 구조화 된 루프 구조는 단지 라이브러리 함수이기 때문에 더 많은 것들이 있으며 프로그램에 적합한 구조를 선택할 자유가 훨씬 더 많습니다.

관련 문제