2011-01-11 1 views
2


저는 JavaScript에 익숙하지 않으며 몇 가지 동작을 이해하지 못합니다. Eloquent JavaScript에있는 reduce 함수의 재귀 버전을 작성하고 싶습니다.자바 스크립트에서 재귀 감소

function rec_reduce(fn, base, list) { 
    if(list.length === 0) { 
     return base; 
    } 
    else { 
     rec_reduce(fn, fn(base, list[ 0 ]), list.slice(1)); 
    } 
} 
print(rec_reduce(Math.min, 100, [ 5, 3, 7, 2, 6, 5 ])); 

결과가 있었다 :

undefined 

내가 넣어에 무슨 일이 일어나고 있는지 보려면 : 그건 내 코드의 함수의 첫 번째 라인으로

print(base); 

및 결과였다

100 
5 
3 
3 
2 
2 
2 
undefined 

누구나 나를 설명 할 수 있습니까? 하이?

reduce_file.js :

function reduce(arr, func, initv){ 
     if(arr.length) return reduce(arr.slice(1), func, func(initv, arr[0])) 
     else return initv 
} 
module.exports = reduce 

한 다음로 사용하는 else 블록에서

답변

6

, 당신은

return rec_reduce(...) 
+0

THX 많은 행

10 

! 나는 지금이 반환 물건을 잊어 버렸습니다. 그 이유는 주로 모든 재능이 필요했기 때문입니다. 나는 Scheme에서 프로토 타입을 만들었습니다. 반환 문장이 없습니다.) Thx again! – trzewiczek

+0

@trzewiczek 조심 받아라. 당신의 프로필도 잘 어울립니다. –

+0

죄송합니다 - 단지 경험이 없습니다 - 잊어 버렸습니다 !! – trzewiczek

2

에 그것을 할 수있는 또 다른 방법이있을 것이다 :

reduce = require('./reduce_file.js') 
console.log(reduce([1,2,3,4], function(prev, curr) { 
    return prev + curr 
}, 0)) 

결과 : 1 + 2 + 3 + 4 = 10