함수형 프로그래밍은 수학과 밀접한 관련이 있습니까?


21

함수형 프로그래밍의 대부분이 수학 개념으로 표현되어 있기 때문에 함수형 프로그래밍은 수학과 관련이 있습니까? 명령적인 배경을 가진 프로그래머를위한 기능적 프로그래밍을 배우고 이해하려면 강력한 수학 기반을 가져야 하는가?


1
이 질문에 mathematica 태그가 올바르게 지정 되었습니까? 아니면 수학이어야합니까?

여기여기 에 매우 비슷한 두 가지 질문이 있습니다. 나는 당신 수학에서 '강한 기초'를 가져야 한다고 생각하지 않지만 어떤 관점에서 그 원리를 상당히 잘 이해해야합니다. 기하학은 메모리 매핑에 가장 도움이되지만 더 이상 숫자를 생각하지 않습니다. 수학은 매우 유용 할 수 있습니다.
Garet Claborn

답변:


28

모든 프로그래밍은 수학과 관련이 있습니다. 실제로 많은 대학들이 여전히 컴퓨터 과학 프로그램을 수학 부서의 영역에두고 있습니다.

함수형 프로그래밍을 배우는 데있어 수학을 학습하기 위해 강력한 기반을 가질 필요는 없습니다. 나는 합리적인 능력 (Haskell, Erlang, Clojure)에 이르기까지 세 가지 다른 기능 언어를 배웠으며 내 자신의 수학 기술은 매우 약합니다. Haskell의 커뮤니티는 실제로 수학 중심의 사물에 대해 약간 성가 시게 할 수 있지만 Erlang과 Clojure는 매우 실용적인 실용적인 프로그래밍 언어이며 튜토리얼 정보가 작성되어 보이지 않기 때문에 다루기가 어렵지 않습니다. 하드 코어 수학 괴짜가 아닌 프로그래머를 위해. 존재가 말했다, 수학에서 내 신체 장애에도 불구하고 나는 불가능하지 그래서, 하스켈을 선택하십시오.

일반적으로 선언적 프로그래밍 언어를 선택하는 데있어 실제로 어려움을 겪고있는 것은 (기능이 하위 집합 임) 통제 할 수있는 욕구를 포기하는 것입니다. 컴퓨터에게해야 할 일을 알려줍니다. 익숙해지는 데 약간의 시간이 걸립니다.


좋은 단어, +1
Mudassir

4
SQL을 배우면 선언적 프로그래밍이 그리 어렵지 않습니다.

7

예. 기본적으로 기능적 프로그램은 다음과 같은 진술입니다.

// 1_와 2_는 "더미 인수"입니다. f (1_) : = sin (1_) g (1_, 2_) : = 1_ + 2_ 등 ...

x = f ()

y = g (x)

z = h (x, h2 (y))

기타...

이전에 정의 된 값의 함수로 새 값 (참고 : 변수가 아님)을 정의하는 방정식 형태로 프로그램이 수행해야하는 작업을 작성하고 있습니다. 함수를 관계로 정의 할 수도 있습니다. 수학적 정리가 쓰여지는 방식과 정말 비슷합니다.


나는 하스켈과 다른 것의 이상한 시냅스보다 수학적 기능을 더 잘 이해할 수 있습니다. 수학 단계를 기능 언어의 구문과 관련시키는 링크가 있습니까?
RainDoctor

이 답변은 정확합니다. FP는 단계별 절차가 아니라 수학 함수를 작성하고 있음을 인식하고 내부화하면 완벽하게 이해됩니다. 대부분의 사람들은 절차 적 프로그래밍을 먼저 배우고 그 수하물은 방대합니다. 절차 언어의 "기능"을 "절차"라고해야한다고 생각합니다.
Kakaji

2

함수형 프로그래밍을 사용할 수있는 언어의 예로 IMO Mathematica는 수학에 대한 강력한 배경 지식이 필요하지 않습니다. 사실, 나는 기본적인 수학 교육 중에 함수형 프로그래밍과 같은 것을 겪지 않았다고 생각합니다. C 스타일을 사용하여 Mathematica 프로그래밍을 시작했으며 몇 년 후에 만 ​​기능 프로그래밍을 발견했습니다. 나는 기본적인 기능 프로그래밍 구문처럼 생각하지 않는다 Map, Apply, NestList, 등 모든에서 어떤 수학 배경이 필요합니다.


1

실제로는 아닙니다. 함수형 프로그래밍은 단지 방법론이지만 람다 미적분학과 그와 같은 것들을 기반으로했습니다.

클로저는 기능적 프로그래밍 개념을 절차 적 언어로 도입하려는 소규모 시도입니다. 대신에 for(int i =0 ; i < num; i++) doStuff(arr[i]);, 배열의 요소가 본질적으로 "한 것들"을 가질 수 있다고 가정 할 수 있습니다.arr.each do |el| doStuff(el) end


10
클로저가 아닌 익명 함수 만 예시하고 있습니다. 위키피디아 :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.

1

짧은 대답은 그렇습니다. 프로그래밍 언어와 같은 특정 수준의 공식화를 가진 모든 것은 다양한 정도의 수학을 위해 수학과 밀접한 관련이 있기 때문입니다.

그러나 프로그래밍 언어를 사용하기 위해서는 언어의 이론적 기초와 같은 수학에 대한 지식이 반드시 필요하지는 않습니다. 문맥 자유 언어가 무엇인지, 언어를 사용하기 위해 그러한 언어가 어떤 법과 재산을 가지고 있는지 알 필요는 없습니다. 마찬가지로, 독일어 나 프랑스어를 구사하기 위해 독일인이나 로마인 일 필요는 없습니다.

"수학적"표기법은 기능적 언어의 공통 속성이 아닙니다. 스칼라와 모든 Lisp 기반 언어는 Haskell에 비해 구문이 매우 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.