함수형 프로그래밍의 대부분이 수학 개념으로 표현되어 있기 때문에 함수형 프로그래밍은 수학과 관련이 있습니까? 명령적인 배경을 가진 프로그래머를위한 기능적 프로그래밍을 배우고 이해하려면 강력한 수학 기반을 가져야 하는가?
함수형 프로그래밍의 대부분이 수학 개념으로 표현되어 있기 때문에 함수형 프로그래밍은 수학과 관련이 있습니까? 명령적인 배경을 가진 프로그래머를위한 기능적 프로그래밍을 배우고 이해하려면 강력한 수학 기반을 가져야 하는가?
답변:
모든 프로그래밍은 수학과 관련이 있습니다. 실제로 많은 대학들이 여전히 컴퓨터 과학 프로그램을 수학 부서의 영역에두고 있습니다.
함수형 프로그래밍을 배우는 데있어 수학을 학습하기 위해 강력한 기반을 가질 필요는 없습니다. 나는 합리적인 능력 (Haskell, Erlang, Clojure)에 이르기까지 세 가지 다른 기능 언어를 배웠으며 내 자신의 수학 기술은 매우 약합니다. Haskell의 커뮤니티는 실제로 수학 중심의 사물에 대해 약간 성가 시게 할 수 있지만 Erlang과 Clojure는 매우 실용적인 실용적인 프로그래밍 언어이며 튜토리얼 정보가 작성되어 보이지 않기 때문에 다루기가 어렵지 않습니다. 하드 코어 수학 괴짜가 아닌 프로그래머를 위해. 존재가 말했다, 수학에서 내 신체 장애에도 불구하고 나는 한 불가능하지 그래서, 하스켈을 선택하십시오.
일반적으로 선언적 프로그래밍 언어를 선택하는 데있어 실제로 어려움을 겪고있는 것은 (기능이 하위 집합 임) 통제 할 수있는 욕구를 포기하는 것입니다. 컴퓨터에게해야 할 일을 알려줍니다. 익숙해지는 데 약간의 시간이 걸립니다.
예. 기본적으로 기능적 프로그램은 다음과 같은 진술입니다.
// 1_와 2_는 "더미 인수"입니다. f (1_) : = sin (1_) g (1_, 2_) : = 1_ + 2_ 등 ...
x = f ()
y = g (x)
z = h (x, h2 (y))
기타...
이전에 정의 된 값의 함수로 새 값 (참고 : 변수가 아님)을 정의하는 방정식 형태로 프로그램이 수행해야하는 작업을 작성하고 있습니다. 함수를 관계로 정의 할 수도 있습니다. 수학적 정리가 쓰여지는 방식과 정말 비슷합니다.
함수형 프로그래밍을 사용할 수있는 언어의 예로 IMO Mathematica는 수학에 대한 강력한 배경 지식이 필요하지 않습니다. 사실, 나는 기본적인 수학 교육 중에 함수형 프로그래밍과 같은 것을 겪지 않았다고 생각합니다. C 스타일을 사용하여 Mathematica 프로그래밍을 시작했으며 몇 년 후에 만 기능 프로그래밍을 발견했습니다. 나는 기본적인 기능 프로그래밍 구문처럼 생각하지 않는다 Map
, Apply
, NestList
, 등 모든에서 어떤 수학 배경이 필요합니다.
실제로는 아닙니다. 함수형 프로그래밍은 단지 방법론이지만 람다 미적분학과 그와 같은 것들을 기반으로했습니다.
클로저는 기능적 프로그래밍 개념을 절차 적 언어로 도입하려는 소규모 시도입니다. 대신에 for(int i =0 ; i < num; i++) doStuff(arr[i]);
, 배열의 요소가 본질적으로 "한 것들"을 가질 수 있다고 가정 할 수 있습니다.arr.each do |el| doStuff(el) end
The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.
짧은 대답은 그렇습니다. 프로그래밍 언어와 같은 특정 수준의 공식화를 가진 모든 것은 다양한 정도의 수학을 위해 수학과 밀접한 관련이 있기 때문입니다.
그러나 프로그래밍 언어를 사용하기 위해서는 언어의 이론적 기초와 같은 수학에 대한 지식이 반드시 필요하지는 않습니다. 문맥 자유 언어가 무엇인지, 언어를 사용하기 위해 그러한 언어가 어떤 법과 재산을 가지고 있는지 알 필요는 없습니다. 마찬가지로, 독일어 나 프랑스어를 구사하기 위해 독일인이나 로마인 일 필요는 없습니다.
"수학적"표기법은 기능적 언어의 공통 속성이 아닙니다. 스칼라와 모든 Lisp 기반 언어는 Haskell에 비해 구문이 매우 다릅니다.