먼저, 부분 함수 응용을 실수로 잘못 입력하는 것이 일반적입니다. 예를 들어 this을 참조하십시오 (더 나은 자원을 설명하는 것이 확실하지만, 이것은 제가 처음 발견 한 것입니다). 실제로 거의 모든 사람이 실제로는 currying을 사용하는 것을 보지 못했습니다. (Haskell과 같은 언어는 예외입니다. 모든 기능은 언어 자체로 말하지만 말하자면 단순한 부분 기능 응용을 가능하게합니다.) 반면 부분 함수 응용 프로그램은 많은 언어에서 유용합니다.
어쨌든 (부분적으로 함수 응용 프로그램에 대해 이야기하고 있다고 가정 할 때 (대부분의 사람들이 currying에 대해 질문 할 때 이야기하고 있기 때문에) 개념은 C++에서 순수한 함수 언어와 같이 자연스럽지 않습니다. , 예를 들어 하스켈 (Haskell).
예를 들어 여기서 숫자 list
의 배열을 취하여 모든 숫자를 합한 함수 sum
을 정의합니다. 접이식 개념이 불충분하다면 (또는 때로는 축소 또는 주입) this을 읽으십시오. 어쨌든, 다음과 같이 보일 것입니다 :
sum list = foldl (+) 0 list
그러나 잠시 기다려주십시오. 부분 기능 응용 프로그램을 사용하여 단축 할 수 있습니다! 인수를 제공하는 대신 sum
은 foldl과 같은 함수이며 +와 0을 부분적으로 적용한다고 가정합니다.
sum = foldl (+) 0
어느 것이 더 읽기 쉽습니까? 선호도의 문제는 아마 그렇지만 후자는 내 의견으로는 합계와 foldl 간의 관계를 더 분명하게 강조합니다. 그리고 이것이 매우 간단한 예임을 고려하십시오. 솔직히 C++로 좋은 예제를 작성하는 법을 알지 못하기 때문에 거기서 나를 용서해야합니다. 어쨌든 실질적인 이점은 무엇입니까? 해독 성. 더 명확한 의도. 더 짧은 코드.
면책 조항 : 실제로 (부분 기능 응용 프로그램과 반대되는) currying의 이점을 알고 싶다면이 모든 것을 읽도록 유감스럽게 생각합니다. 그러나 다른 한편으로는, 두 가지의 차이점을 이해한다면, currying은 부분 함수 적용을 구현하는 좋은 방법이라는 것을 이해할 것입니다.
관련있는 것 같습니다 : http://stackoverflow.com/questions/4888480/practical-use-of-curried-functions/4894045#4894045 - 질문에 대한 대답입니까? –
감사. Jakob의 게시물은이 경우 많은 통찰력을주었습니다. 링크 된 게시물은 그것에 기반합니다. –
이 답변에는 단순하고 비 이론적 인 예제가 있습니다. http://stackoverflow.com/questions/2725811/is-currying-just-a-way-to-avoid-inheritance/2725841#2725841 – jtolle