"함수형 프로그래밍"의 두 판 사이의 차이

잔글
봇: 틀 이름 및 스타일 정리
잔글 (봇: 틀 이름 및 스타일 정리)
{{프로그래밍 패러다임}}
'''함수형 프로그래밍'''은 자료 처리를 [[함수|수학적 함수]]의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 [[프로그래밍 패러다임]]의 하나이다. [[명령형 프로그래밍]]에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 프로그래밍이 [[문 (프로그래밍)|문]]이 아닌 식이나 선언으로 수행되는 [[선언형 프로그래밍]] 패러다임을 따르고 있다.<ref name="expression style">{{cite web인용|url=https://wiki.haskell.org/Declaration_vs._expression_style#Expression_style|title=Declaration vs. expression style - HaskellWiki|publisher=}}</ref> 함수형 프로그래밍은 1930년대에 계산가능성, 결정문제, 함수정의, 함수응용과 재귀를 연구하기 위해 개발된 형식체계인 [[람다 대수]]에 근간을 두고 있다. 다수의 함수형 [[프로그래밍 언어]]들은 람다 연산을 발전시킨 것으로 볼 수 있다.
 
수학적 함수와 명령형 프로그래밍에서 사용되는 함수는 차이가 있는데, 명령형의 함수는 프로그램의 상태의 값을 바꿀 수 있는 부작용이 생길 수 있다. 이 때문에 명령형 함수는 참조 투명성이 없고, 같은 코드라도 실행되는 프로그램의 상태에 따라 다른 결과값을 낼 수 있다. 반대로 함수형 코드에서는 함수의 출력값은 그 함수에 입력된 인수에만 의존하므로 인수 x에 같은 값을 넣고 함수 f를 호출하면 항상 f(x)라는 결과가 나온다. 부작용을 제거하면 프로그램의 동작을 이해하고 예측하기가 훨씬 쉽게 된다. 이것이 함수형 프로그래밍으로 개발하려는 핵심 동기중 하나이다.
</source>
 
그러나 함수형 언어에서는 이 함수를 익명함수로 작성할 수 있다.
 
다음은 [[하스켈]]로 작성한 제곱 함수이다.
 
== 고계 함수 ==
'''고계 함수(higher-order function)'''란, 함수를 다루는 함수를 뜻한다. 사실 함수형 언어에서는 함수도 '값(value)'으로 취급한다. 그러므로 정수 1이나 인수를 제곱하는 함수나 동등한 입장에서 다룰 수 있다. 정수를 함수의 인수로 전달할 수 있듯이 어떤 함수도 다른 함수의 인수로 전달할 수 있다. 마찬가지로 함수의 결과 값으로 정수를 반환할 수 있듯이 함수를 반환할 수도 있다.
 
예를 들어서 1에서 10까지 숫자로 이루어진 리스트의 각 원소를 제곱하고 싶다고 하자. 명령형 언어에서는 반복문을 이용하여 리스트를 훑어 가며 각 원소를 제곱하겠지만, 함수형 언어에서는 리스트를 다루는 고계 함수로 이를 처리할 수 있다. 다음은 [[하스켈]]을 이용하여 이를 수행한 예를 보여준다.
 
== 외부 링크 ==
* {{cite web인용
| last = Ford
| first = Neal
| url = http://www.ibm.com/developerworks/java/library/j-ft20/index.html
}}
* {{cite web인용
| last = Akhmechet
| first = Slava

편집

1,874,882