2017-10-19 1 views
0

함수 프로그래밍의 개념을 이해하려고합니다. 난 그냥 보통 우리가 이런 식으로 10까지 셀 것입니다 그것을Functional Programming Style의 숫자를 계산 하시겠습니까?

의 개념을 이해하고 여기에 자바 스크립트를 사용하고 있습니다 :

for(var i=0;i<10;i++){ 
 
console.log(i+1) 
 
}

이이 기능 프로그래밍 등가인가?

var a = 1; 
 
var n = 10; 
 

 
function counter(){ 
 
    console.log(a); 
 
    if(a<n){ 
 
    counter(++a); 
 
    } 
 
} 
 

 
counter();

+5

'++ A' 당신이 재귀의 예를 가지고 –

+0

당신이 기능을 프로그래밍 할 것 것이 아닙니다. FP를 이해하려면 Clojure와 같은보다 기능적인 언어를 사용해보십시오. – jmargolisvt

+0

하스켈은 순수 함수형 언어입니다. – leaf

답변

1
당신은 (더) 함수형 프로그래밍 솔루션을 얻기 위해 재귀를 사용할 수

: 당신은 함수형 프로그래밍에서 가변 데이터를 변경할 수 없습니다

(function counter(a, n){ 
 
    console.log(a); 
 
    a < n && counter(a+1, n); 
 
})(1, 10);

-2

을 . 변수를 풀 때 수학을 수학으로 생각하십시오. 당신이하는 일에 상관없이, 그 변수는 항상 같은 가치를 가질 것입니다. 귀하의 예에서는 해당 변수의 값을 변경하고 있습니다. 함수형 프로그래밍을 수행하려면 해당 함수가 처음에했던 것처럼 종료 될 때 해당 변수가 동일한 값을 가져야합니다.

var a = 1; 
 
var n = 10; 
 

 
counter(a,n); 
 

 
function counter(num, limit){ 
 
    if (num > limit) 
 
    return; 
 
    console.log(num); 
 
    counter(num+1, limit); 
 
}

는 기능 A와 프로그래밍 및 간주됩니다 n은 여전히 ​​같은 값 때문에 당신이 변경되지 않은 가변 데이터를 가질 것이다.

Functional Programming

+0

"변경할 수없는 데이터"는 모순입니다. 나는 "함수형 프로그래밍에서는 데이터가 변경되지 않는다"라고 말할 것입니다. – leaf

+0

예,하지만 var는 JavaScript에서 변경 가능한 변수입니다. 그래서 당신이 그것을 바꿀 수는 있지만, 당신은 그것을 변하지 않는 것처럼 다루어야합니다. –

+1

아직도 문장이 모호합니다. 당신이 초보자에게 말하고 있다는 것을 명심하십시오. – leaf

0

는 여기에 내 걸릴입니다.

Array(n).fill()은 반복 할 범위를 n으로 생성하는 데 사용됩니다.

.forEach(...)은 요소를 반복하고 요소의 indexb ("base") 값을 기반으로 작업을 외부에서 제공합니다.

const counter = (n, b) => Array(n).fill().forEach((_, index) => console.log(index + b)); 
 

 
counter(10, 1);