2013-06-03 5 views
9

나는이 기사를 읽었습니다 : http://en.wikipedia.org/wiki/Function_pointer 그리고 일종의 혼란 스럽습니다. C/C++에서 함수 포인터를 지원하기 때문에 일반적으로 함수 프로그래밍을 지원한다는 의미는 아닙니다. 함수 프로그래밍을 위해 실제로 C 나 C++을 사용하고 싶지는 않지만, C 또는 C++이 그런 것을 지원한다는 말을 들어 본 적이 없기 때문에 궁금합니다. (나는 많은 함수형 프로그래밍 언어에 대한 컴파일러가 C에 존재한다는 것을 알고 있지만 실제로는 "지원"이라는 뜻이 아닙니다.)C/C++의 기능 프로그래밍?

+0

@cdbitesky, 나는 이것이 약간 불공평하다고 생각합니다. 문제는 함수 프로그래밍을 허용 할 때 함수 포인터의 역할을 확인하는 데 상대적으로 정확합니다. 분명히 우리는 "함수형 프로그래밍"에 대한 기술적 인 정의에 대해 약간의 말을 할 수 있지만, 필자는이를 내 대답에서 다뤘다 고 생각한다. – Gian

답변

7

편집 : 왜이 답변이 너무 싫어하는지 모르겠습니다. 이 질문은 구체적으로 함수 포인터에 대한 질문과 그 존재 여부가 C++에서 "함수 프로그래밍 전반"을 지원하는지 여부를 묻습니다.

일종의 기술적 인 방법은별로 유용하지 않습니다. 예 *. "기능적"프로그래밍의 진정한 본질은 기능이 가치라는 것입니다. C 및 C++는 lexical closures의 쉬운 생성 및 파기와 관련하여 도움을주지 않으며 partial application의 호의를 베풀지 않습니다. 함수 포인터를 사용하여 값처럼 작동하는 함수의 모양을 시뮬레이션 할 수 있다는 사실은 실제로 동일한 표현 언어의 결과 일뿐입니다. 이것을 "기능 프로그래밍"과 결합 시키려고하면 튜링 타피트에 깊이 들어가 있습니다.

* 실제 기술적 구분을 위해 C 및 C++에는 실제로 함수 유형이 이 없습니다. 함수 포인터는 함수 값과 구별됩니다.

+1

펑터는 어떻게됩니까? 이들은 STL을 사용하는 표준 방법입니다. C++ 11에는 단일 형 람다가 있고 C++ 14에는 일반 람다가 있습니다. – gnzlbg

+2

내 대답을 C++ 14에 대해 false로 해석하도록 선택할 수 있습니다. 질문은 함수 포인터에 관한 것이 었습니다. – Gian

14

기능 프로그래밍 (실제로 관심이있는 경우 찾아보십시오)은 함수 포인터 나 함수 포인터가 부족한 경우가 거의 없습니다.

C++는 FP에 대한 많은 지원을받는 다중 패러다임 언어이며, 특히 이후 버전입니다. FP와 같은 WG21을 사용하는 많은 사람들이 지원을 요청합니다. C++ 11에서는 람다와 C++ 14 다형성 람다 데뷔도있었습니다. 그것은 많은 것들을 다룹니다. 기능이 2 등석 시민들에게 머물러있는 동안 람다는 정상을 이어갈 수 있습니다.

불행히도 꼬리 재귀 처리는 여전히 필수는 아니지만 컴파일러가 실제로 처리합니다. 그리고 지난 10 년 동안 const 오버로드를 엉망으로 만들었을 때 편리하게 "무한 재귀"를보고합니다. :)

C++에서 FP 스타일을 사용하여 꽤 멀리 갈 수 있으며 다른 스타일을 선택한 경우에도 더 나은 코드를 작성할 수 있습니다. 나는 모두가 SICP을 공부하는 것이 좋습니다.

+0

저는 실제로 OCaml을 배우려고합니다. 이것이 바로 Wikipedia를 탐색하고 함수 포인터를 사용하게 된 원인입니다. 나는 함수 프로그래밍이 아직 무엇인지 아직 알지 못해이 질문을함으로써 총을 뛰어 넘었다 고 생각한다. – user2258552

4

언어가 정확히 도움이되지는 않지만 C++로 함수형 프로그래밍을 할 수 있습니다. 가능한 한 많은 불변 값을 사용하는 1 차 함수 프로그래밍은 확실히 쉽고 정확하지는 않지만 실제로는 monads을 구현할 수 있습니다!