절차적 프로그래밍과 함수형 프로그래밍의 차이점은 무엇인가요?

절차적 프로그래밍]1함수형 프로그래밍에 대한 위키피디아 기사를 읽었지만 여전히 약간 혼란스럽습니다. 누군가 핵심을 요약해 주실 수 있나요?

해결책

함수형 언어를 사용하면 (이상적으로는) 수학 함수, 즉 n개의 인수를 받아 값을 반환하는 함수를 작성할 수 있습니다. 프로그램이 실행되면 이 함수는 필요에 따라 논리적으로 평가됩니다.1

반면에 절차적 언어는 일련의 순차적 단계를 수행합니다. (순차적 논리를 함수형 논리로 변환하는 방법에는 연속 전달 스타일이라는 것이 있습니다).

결과적으로 순수 함수형 프로그램은 입력에 대해 항상 같은 값을 산출하고 평가 순서가 잘 정의되어 있지 않으므로 사용자 입력이나 임의의 값과 같은 불확실한 값은 순수 함수형 언어로 모델링하기 어렵습니다.


1 이 답변의 다른 모든 것과 마찬가지로, 이는 일반화입니다. 연산을 순차적으로 호출하지 않고 결과가 필요할 때 평가하는 이 속성을 "게으름"이라고 합니다. 실제로 모든 함수형 언어가 보편적으로 게으른 것은 아니며, 게으름이 함수형 프로그래밍에만 국한된 것도 아닙니다. 오히려 여기에 설명된 내용은 서로 다른 프로그래밍 스타일을 뚜렷하고 반대되는 범주가 아닌 유동적인 아이디어로 생각할 수 있는 '정신적 틀'을 제공합니다.

해설 (4)

컴퓨터 과학에서 함수형 프로그래밍은 계산을 수학적 함수의 평가로 취급하고 상태 및 변경 가능한 데이터를 피하는 프로그래밍 패러다임입니다. 상태의 변화를 강조하는 절차적 프로그래밍 스타일과 달리 함수의 적용을 강조합니다.

해설 (1)

있다고 믿지만 / 기능 / 절차적 프로그래밍 방법에 대한 객관적인 외곽진입 문제가 있다.

첫 번째 스타일이 될 수 있는 모든 문제가 해결되는 계획을 수립하여 단계, 한 번에 한 단계 (절차). 반면, 함수형 프로그래밍 할 수 있는 분할 정복 강조하십시오 문제를 해결한 후 각 서브노드 문제 서브노드 문제 외곽진입 분할됩니다 (문제를 해결할 수 있는 함수를 만드는 서브노드) 와 결합하여 그 결과가 전체에 대해 문제. 마지막으로, 객관적인 현실 세계를 만들 수 있는 다양한 컴퓨터 내부의 미니 세계 프로그래밍 다시그것들을 한다) 가 갖고 있는 고유한 특성, 상호 작용 (약간), 각 개체가 된다. 그 결과 통해 상호 작용 될 전망이다.

각 스타일의 프로그래밍은 고유의 장점과 단점. 따라서 같은 일을 &quot 순결케 programming"; (즉, 순수하게 절차적 - 아무도 높여줍니까 이 그렇고, 이는 일종의 이상한 - 또는 전적으로 기능 또는 전적으로 목표) 는 매우 어렵기 때문에, 일부 초등학교에서요 보여줄 수 없는 문제가 아닌 경우 외에는 특별하게 설계된 프로그래밍 스타일을 (즉, 정수, 우리들은 같은 자들이 &quot weenie"; D).

그 후, 우리는 이러한 스타일이 있는 일부 프로그래밍 언어를 통해 최적화된 고안되었습니다 각 스타일. 예를 들어, 어셈블리 (assembly) 가 모든 단계별. 그래, 절차적 언어는 아니라, 파스칼, C 와 같은 초기의 Asm (및 포트란 들었다). 그 후, 우리는 모든 유명한 학교 에서 Java 목표 (실제로 돈 지향, 자바와 C # 은 또한 클래스 호출됨 &quot "; 그러나 이는 다른 주제라서요 토론). 또한 목적이 있다. 학교 에서 거의 functional&quot, 기능, 우리는 &quot 있을 것이라고 말했다. (어떤 것을 할 수 있도록 합니다), 가족, 가족, ML, 순수하게 functional&quot &quot 많은 리스프 하스켈, 얼랭, etc. 그나저나, 펄, 파이썬, 루비 등 일반 언어가 많다.

해설 (0)

Konrad의 의견을 자세히 설명합니다:

결과적으로 순수 함수형 프로그램은 입력에 대해 항상 동일한 값을 산출하며 평가 순서가 잘 정의되어 있지 않습니다;

이 때문에 함수형 코드는 일반적으로 병렬화하기가 더 쉽습니다. 함수는 (일반적으로) 부작용이 없고 (일반적으로) 인자에 따라 동작하기 때문에 많은 동시성 문제가 사라집니다.

함수형 프로그래밍은 코드가 올바른지 '증명'할 수 있어야 할 때에도 사용됩니다. 이는 절차적 프로그래밍에서는 훨씬 더 어렵습니다(함수형 프로그래밍에서는 쉽지는 않지만 여전히 쉽습니다).

면책 조항: 저는 함수형 프로그래밍을 몇 년 동안 사용하지 않았고 최근에야 다시 살펴보기 시작했기 때문에 여기서 완전히 정확하지 않을 수 있습니다.)

해설 (0)

절차적 언어로 시/도 추적할 수 있다 (변수 사용) 와 같은 일련의 단계를 실행할 수 있다. 순수한 함수형 언어 사용 불가능한 상태로 계속 추적합니까 don& # 39, t 값, 일련의 종속물과의 autoexec. 경향이 있다. 대부분의 경우, 상태 정보를 갖고 있는 콜 스택의 약간만이라도 해당하는 저장됩니까 스테이드 변수가 될 수 있는 절차적 코드입니다.

기능성 프로그래밍 스타일을 반복이 고전적인 예다.

해설 (1)

39 의 확대를 Konrad& 대한 설명:

&gt. and the order of 평가 아니다. &gt. 잘 정의된

어떤 언어 %s/dbase/ext_table. 일부 기능 호출됨 느긋한 계산법. 즉, 함수 값을 요구되는가 때까지 실행되지 않습니다. 그 때까지는 어떤 함수 자체는 수립하였습니다 전달됩니다.

절차적 언어는 1 단계 2 단계 3 단계. you say it right 경우 추가 2 + 2, 2 단계에서 않니다 어졌다면. 너 이렇게 말할 수 있지만, 경우에 따라 추가 2 + 2 lazy evaluation) 에서 사용한 적이 없는 것, 그것은 결코 높여줍니까.

해설 (0)