문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Haskell (문단 편집) === 순수 함수형 언어 === 보통 순수 함수형 언어의 가장 큰 특징으로는 [[부작용]]([[Side Effect]])이 없는 것을 꼽는다. 하지만, 사실 이것은 함수형 언어보다는 순수 선언형 언어(Declarative language)의 특징에 가깝다. 함수형 언어는 순수 선언형 언어의 하위 카테고리라 볼 수 있다. 순수 함수형 언어에서 함수는 수학에서의 함수와 같아서 부작용(또는 [[부수효과]]. Side Effect)이 없는 것을 의미한다. 즉, 순수 함수형 언어에서 함수의 결과값은 파라미터(parameter)로 넘겨진 입력값에 의해서만 결정된다. 여기서 말하는 부작용이란, 같은 입력임에도 불구하고 출력이 달라지는 것을 말한다. 예를 들어 자동차를 클래스로 구현했을 때, 주어진 파라미터만큼 자동차의 속도를 증가시키고 현재 속도를 출력하는, 절차지향적으로 작성된 accelerate() 함수를 가정해 보자. 예를 들어, accelerate(10)는 자동차의 속도를 10 증가시킨다. 자동차가 정지해 있을 때 accelerate(10)이 호출되면 자동차의 속도는 10 증가하므로 현재 속도는 10이고, 따라서 현재 속도인 10이 출력된다. 이때 한 번 더 accelerate(10) 함수를 호출하면 출력값은 20이 된다. 이처럼 state를 가지는 상태머신의 경우, 출력값은 입력 뿐만 아니라 머신의 상태 역시 출력을 좌우할 수 있다. 즉, 같은 입력인데도 결과가 달라지는 것이 바로 부작용이다. 하지만 순수한 함수들로 구성된 프로그램은 부작용이 없어 실행 순서의 영향에서 자유롭기 때문에 병행성을 가지기 좋다. 또한 [[루프]]문이 없고 제어문도 아주 적으며, 대부분의 경우 제어문을 사용할 필요가 없다. 대부분의 분기는 패턴 매칭과 가드에 의해 만들어진다. ~~그래서 OOP 쓰던 사람이 Haskell 처음 입문하면 정말 속터진다.~~ 하스켈은 {{{System.IO.Unsafe}}} 모듈의 {{{unsafePerformIO}}}[* 하스켈 위키에서는 아예 'Dark side of IO monad' 단락에 포함시켜 놨다(...).] ~~시스템 레벨로 뭐 할 때 빼고는 누구도 안 쓴다. 사실 일반적인 프로그램에서 쓰면 안되는 함수들이다.~~ 등을 제외하면 순수 함수형 언어로 규정할 수 있다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기