2014-01-23 7 views
2

functional programming에 대한 몇 가지 정의가 있음을 알고 있습니다. 나는 그것이 불투명 한 범주라고 생각한다. 내 개인적인 정의는 'referential transparency'에 가깝습니다.기능 프로그래밍의 정의 내에서 '할당없이 프로그래밍'을 고려할 수 있습니까?

이 질문은 '함수 프로그래밍의 정의는 무엇입니까?'. 우리가 알고있는 것은 함수형 프로그래밍이 불분명 한 경계를 지닌 두 가지 아이디어의 잡동사니입니다.

매우 놀라운 책 Structure and Interpretation of Computer Programscontains the following reference기능 프로그래밍으로 변경되었습니다.

이 책의 처음 두 장에서했던 것처럼 과제를 사용하지 않고 프로그래밍하는 것은 기능 프로그래밍이라고합니다.

저에게는 이상하게 보였습니다.

내 질문 : 기능 프로그래밍의 정의 내에서 '할당없이 프로그래밍'을 고려할 수 있습니까?

+1

음, SICP가 그렇다고 말하면, 그렇습니다. 적어도 그것이 영향력있는 목소리입니다. 그러나 여기에 정의 된 많은 질문들과 마찬가지로, 당신은 돈을 지불하고 선택을해야합니다. 함수 프로그래밍 *에 대한 하나의 진정한 정의 *는 없습니다.I (또는 귀하)가 SICP의 요점에 동의하는지 여부는 중요하지 않습니다. 저자는 기능 프로그래밍에 대해 흥미로운 점을 제시합니다. 이러한 문제에 대해 생각할 때 고려해 봐야 할 점이 있습니다. 저는 이것을 의견에 대한 것으로 간주하고 있습니다. 왜냐하면 저는 이것을 의견의 문제로 여기에서 눈살을 찌푸리게합니다. –

답변

5

스칼라 및 LISP 사용자는 아마도 매우 좁은 정의라고 할 수 있지만 가능하다고 생각합니다. 그러나 기능 프로그래밍에 대한 진정한 정의가 논란의 여지가 있지만, 우리는 과제가없는 프로그래밍 스타일에 대해 분명히 추측 할 수 있습니다.

여기서 지정으로으로, 우리는 변수의 변이를 의미한다고 가정합니다. 이것은 당신이 더 할당이 없다되면, 어떤 돌연변이가없는

let i = 1 in .... -- say that i is a name for an expression, here 1 

int i; 
i = 1;  // overwrite whatever i is with 1 

바인딩 상당히 다릅니다. 돌연변이가 없으면 루프와 같은 특정 구조는 쓸모 없게됩니다. 왜냐하면 모든 변수는 루프 컨텍스트에서 상수 인 표현식의 이름 일 뿐이므로 루프는 절대 또는 영원히 실행됩니다. "다양한"변수를 갖는 유일한 방법은 함수의 수명 내에서 그리고 그 함수의 수명 동안 인수 이름을 바인드하는 어떤 값에 함수를 적용하는 것입니다. 루핑을하는 유일한 방법은 재귀입니다. 이것은 차례로 기능을 현저하게 중요하게 만들고 보너스로 돌연변이가 없으므로 모든 기능이 필요에 따라 순수하게 필요합니다.

돌연변이가 없으면 함수없이 선언적 프로그래밍의 다른 접근 방식을 고려하지 않으면 순수한 함수로 프로그래밍하는 것이 전부이지만 덜 일반적이며 구체적이라는 것이 드러납니다 특정 작업 (SQL, 프롤로그 생각)). 순수 기능프로그래밍 (만) 실제로 함수형 프로그래밍 경우 우리가 문제를 결정하기 전에

이제 우리는 팝콘을 얻을 수 있습니다. :)

+0

감사합니다. 정말 도움이됩니다. 결국 원래의 의견은 내 정의에 훨씬 더 가깝게 들립니다. – hawkeye