2009-04-28 2 views
1

방금 ​​함수 프로그래밍의 세계를 탐구하기 시작했습니다. 지도 및 축소와 같은 개념이 모든 함수 프로그래밍 언어에 적용됩니까?

OOP (객체 지향 프로그래밍) 상속과 다형성의 C#, Java 및 VB.NET과 같은 가장 현대적인 OO 언어에 적용와 같은 개념의 많은

.

그러나 그러한지도, 줄, 튜플 및 설정 등의 개념에 대해, 그들은 모두 FP (기능 프로그래밍) 언어에 적용 어떻게?

저는 F #으로 시작했습니다. 그러나 앞서 언급 한 개념이 Haskell, Nemerle, Lisp 등과 같은 다른 FP에도 적용 되는가?

+0

다형성은 객체 지향 개념이 아닙니다. 이는 여러 가지 "구현"이 많은 일반적인 개념입니다. 당신이 아마 참조하는 것은 "아형 다형성"입니다. 기능적 언어는 "파라 메트릭 다형성"또는 "Ad-hoc polymorphism"을 사용합니다. –

답변

6

내기를 걸었습니다. 함수 프로그래밍에 대한 바람직한 점은 사용자가 설명하는 수학 개념이 FP에서 자연스럽게 표현된다는 것입니다.

다소 힘든 일이지만, John Backus의 Turing Award paper에서는 기능적 (또는 "응용 적") 프로그래밍을 잘 설명했습니다. Wikipedia article도 좋습니다.

+0

@Charlie : 저의 종이는 현재의 상황에서 저를 위해 삼키는 것이 힘들 것 같습니다. 그러나 실제로 배우기 위해 시간을 할애 할 수있는 것처럼 보입니다. 감사. – Sung

+0

"나를 죽이지 않는 것은 나를 더 강하게 만든다." ;-) –

+0

@Charlie : 나는 매운 음식에만 적용된다고 생각했다.;) – Sung

2

예; 고차 함수, 대수 데이터 유형, 접기/변형 률 등은 거의 모든 기능 언어에 공통적으로 사용됩니다 (각 언어별로 약간 다른 이름으로 표시되기도 함).

2

기능 도구는 명시 적으로 처리하는 언어뿐만 아니라 모든 프로그래밍에 적용됩니다. 예를 들어, Python은 mapreduce 내장 함수를 사용하여 예상치 못한 결과를 초래할 수 있습니다. 정말로 영리 해지기 위해서는 멀티 프로세싱 모듈과 같은 것이 필요할 것입니다.

언어가 정확한 프리미티브를 제공하지 않더라도 대부분의 현대 언어는 더 많은 작업을 통해 원하는 효과를 얻을 수 있습니다. 이것은 그들이 데이터 "매핑"와 "감소"할 수 있습니다 유형, 즉,지도, 배열/벡터, 또는 포함 된 모든 언어에 적용되는 클래스와 같은 개념은 순수 C.

+0

+1 "가장 현대적인 언어는 여전히 약간의 작업으로 원하는 효과를 얻을 수있다"<- With C# Map & Reduce를 구현할 수 있지만 코드가 꽤 털이 ... – Sung

+0

튜링 전체 언어 (Ook 및 Brainfuck을 포함한 C 전처리 기는 거의 모든 것이 가능할 수 있습니다. –

+1

분명히 튜링 함정이 달성 할 수없는 함수형 프로그래밍에 의해 계산 된 계산력은 없습니다. 실제 이점은 연산자의 효율적인 구현과 결합 된 언어의 표현력입니다. 효과적이고 이해하기 쉬운 방식으로 작업을 수행하기 위해 튜링 함정 언어를 얻는 것은 매우 어렵습니다. – SingleNegationElimination

0

로 코딩 할 수있는 방식과 유사 기울기.

모든 데이터 구조가 함수 응용 프로그램을 통해 정의되는 "순수한 람다 계산법"언어에서 함수를 병렬로 적용 할 수 있습니다 (즉, fn (expr1, expr2) 호출에서 expr1과 expr2를 계산할 수 있음) 병렬로), 실제로 맵/축소가 무엇인지는 알 수 없습니다.

2

난 당신이 같은 요구하는지 해석 할 것 "고차 함수 (지도, 감소, 필터, ...)과 불변 데이터 구조 (튜플, 죄수리스트, 기록,지도, 세트,은 ...) FP 언어 전반에 걸쳐 공통적으로 사용됩니까? " 그리고 나는 말할 것이다, 절대적으로 긍정.

OOP에는 잘 알려진 기둥 (캡슐화, 상속, 다형성)이 있습니다. 함수 프로그래밍의 "기둥"은 1) 기능을 1 등 값으로 사용하고 2) 부작용없이 표현하는 것입니다. (! F 번호가 BTW 탁월한 선택입니다)

당신은 가능성이 다양한 FP 언어에서 이러한 아이디어를 적용하는 일반적인 도구를 찾을 수 있습니다 그리고 당신은 그들이 주류 언어로 자신의 길을 찾아 볼 수 있습니다; LINQ의 Select = map, Aggregate = reduce/fold, Where = 필터, C#은 간단한 가중치 람다 구문, System.Tuple 등이 있습니다.

비공식적 인 FP 언어에서 일반적으로 누락 된 것으로 보이는 것은 좋은 불변의 데이터 구조와 구문 지원 (라이브러리가 아닌)이며 이로 인해 2 번 기둥에 붙지 않게됩니다. 그 언어들. F # 목록, 레코드, 튜플 등은 모두 훌륭한 언어 및 라이브러리에 대한 좋은 예입니다.

관련 문제