순수하게 기능하는 프로그래밍

Purely functional programming

컴퓨터 과학에서 순수 함수 프로그래밍은 일반적으로 모든 계산수학 함수의 평가로 처리하는 프로그래밍 패러다임(컴퓨터 프로그램의 구조와 요소를 구성하는 스타일)을 지정합니다.

프로그램 실행의 각 단계에서 프로그램 상태를 나타내는 명시적 변수로서 프로그램 상태 및 가변 객체는 보통 시간적 논리로 모델링됩니다. 변수 상태는 상태 변환 함수의 입력 매개 변수로서 전달되며, 이는 업데이트된 상태를 반환 값의 일부로 반환합니다.이 스타일은 프로그램 식의 참조 투명성을 잃지 않고 상태 변경을 처리합니다.

순수 기능 프로그래밍은 기능 패러다임 내에서 함수가 글로벌 또는 로컬 상태에 관계없이 그들의 주장에만 의존하도록 하는 것으로 구성됩니다.순수 기능성 서브루틴은 스코프에 포함된 상태 변수에 의해 나타나는 상태 변화만 볼 수 있습니다.

순수 함수 프로그래밍과 불순 함수 프로그래밍의 차이

순수 함수 프로그래밍과 불순 함수 프로그래밍의 정확한 차이는 논란의 대상이다.Sabry가 제안하는 순도 정의는 모든 일반적인 평가 전략(이름별 콜, 값별 콜, 니즈별 콜)이 오류 또는 [1]분산되는 전략을 무시하고 동일한 결과를 도출한다는 것입니다.

프로그램은 보통 1급 함수나 고차 [2]함수 같은 기능적 프로그래밍 개념을 사용할 때 기능적이라고 합니다.그러나 일급 함수는 필수 패러다임의 기술을 사용할 수 있기 때문에 순수하게 기능적일 필요는 없다. 예를 들어, 변이 셀을 사용하는 입출력 방법이나 어레이는 부작용으로 상태를 갱신할 수 있다.사실, 기능적인 것으로 인용된 최초의 프로그래밍 언어IPL[3][4]Lisp는 모두 Sabry의 정의에 따르면 "불순한" 기능 언어입니다.

순수하게 기능하는 데이터 구조영속적입니다.기능 프로그래밍에는 지속성이 필요합니다. 지속성이 없으면 동일한 계산이 다른 결과를 반환할 수 있습니다.기능 프로그래밍은 영구 비순수 기능 데이터 구조를 사용할 수 있지만, 이러한 데이터 구조는 순수 기능 프로그램에서만 사용할 수 없습니다.

순수하게 기능하는 프로그래밍의 속성

엄밀한 평가와 비엄격한 평가

순수하게 기능하는 프로그램으로 끝나는 각 평가 전략은 동일한 결과를 반환합니다.특히, 열성적인 평가는 게으른 평가와 같은 결과를 반환하기 때문에 프로그래머가 어떤 순서로 프로그램을 평가하는지 고려할 필요가 없도록 한다.그러나 같은 프로그램에 대한 느린 평가가 중단되는 동안 열성적인 평가가 종료되지 않을 수도 있습니다.이 방법의 장점은 게으른 평가를 훨씬 쉽게 구현할 수 있다는 것입니다. 모든 식은 프로그램 상태에 관계없이 언제든지 동일한 결과를 반환하므로 필요한 만큼 평가를 지연시킬 수 있습니다.

병렬 컴퓨팅

순수하게 기능하는 프로그래밍은 평가의 순수하게 기능하는 두 부분이 상호 작용하지 않기 때문에 병렬[5] 컴퓨팅을 단순화합니다.

데이터 구조

순수하게 기능하는 데이터 구조필수 데이터 [6]구조와는 다른 방식으로 표현되는 경우가 많습니다.예를 들어, 상시 액세스와 갱신을 하는 어레이는 대부분의 명령어 언어의 기본 컴포넌트이며 해시 테이블이나 바이너리 힙과 같은 많은 명령어 데이터 구조는 어레이를 기반으로 합니다.어레이는 맵 또는 랜덤액세스 리스트로 대체할 수 있습니다.이 리스트는 기능적인 실장만을 허용하지만 액세스와 업데이트 시간은 로그가 됩니다.따라서 순수하게 기능하는 데이터 구조는 기능하지 않는 언어로 사용할 수 있지만 특히 지속성이 필요하지 않은 경우 가장 효율적인 도구가 아닐 수 있습니다.

일반적으로 명령형 프로그램을 순수 기능형 프로그램으로 변환하려면 이전에 변경 가능했던 구조들이 이제 그것들을 갱신하는 함수, 즉 스토어 패스 스타일이라고 불리는 프로그램 구조로부터 명시적으로 반환되는 것을 확인해야 한다.

순수하게 기능하는 언어

순수하게 기능하는 언어는 순수하게 기능하는 프로그래밍만 허용하는 언어입니다.그러나 순수하게 기능하는 프로그램은 순수하게 기능하지 않는 언어로 작성될 수 있습니다.

레퍼런스

  1. ^ Sabry, Amr (January 1993). "What is a purely functional language?". Journal of Functional Programming. 8 (1): 1–22. CiteSeerX 10.1.1.27.7800. doi:10.1017/S0956796897002943.
  2. ^ Atencio, Luis (18 June 2016). Functional Programming in Javascript. Manning Publications. ISBN 978-1617292828.
  3. ^ 허버트 A의 회고록. Simon (1991), Models of My Life, pp.189-190 ISBN 0-465-04640-1와 Al Newell, 그리고 Cliff Shaw가 수학 자동에서 증명된 논리 이론가 작성 프로그램인 [분야]의 부모로 일반적으로 인정된다고 주장한다.이를 달성하기 위해, 그들은 소급적으로 볼 때 기능적 프로그래밍을 포함하는 언어와 패러다임을 발명해야 했다.
  4. ^ McCarthy, John (June 1978). "History of Lisp". In ACM SIGPLAN History of Programming Languages Conference: 217–223. doi:10.1145/800025.808387.
  5. ^ Marlow, Simon (18 June 2013). Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming. O'Reilly Media. ISBN 978-1449335946.
  6. ^ Chris Okasaki, Cambridge University Press, 1998, ISBN 0-521-66350-4순수 기능 데이터 구조