자바스크립트에서 함수형 언어를 보다가 질문합니다.
글쓴이: doodoo / 작성시간: 목, 2008/07/17 - 12:39오후
http://functional.or.kr/javascript/functional
여기에 보면 마지막 부분에
function bind(func, x){ return function(y){ return func(x,y) } } function plus(x,y){ return x+y } // 더하기 함수 inc = bind( plus, 1 ) // 말그대로 더하기 1을 하는 함수를 만든다.
라고 되어 있어서 결국 마지막줄 bind 합수가 1을 더하는 함수다 라고 했는데..
그럼 return function(y){ return func(x,y) } 이줄에 있는 y 값은 어떻게
보란 말인가요?
bind 에서 plus 를 호출했지만...plus 는 인자가 두개 받는것 아니었던가요?
그렇다면 제대로 호출하려면 bind(plus, 1, 1) 등으로 호출해야 하는것 아닌가요?
아...머리아퍼....
Forums:
bind는 plus를 부르지
bind는 plus를 부르지 않습니다.
plus를 부르는 건 inc입니다.
순서대로 보시면 편합니다.
저 코드는 저런식으로 사용되는데 새 함수의 레퍼런스를 반환하기 때문입니다
즉,
와 같습니다.
여기서 내부 함수의 내용은 다시
return func(x, y); 임으로
bind는 인자를 2개 받는 함수에 첫 인자 값을 지정하여 1개의 인자만 받는 함수로 만드는 함수로 볼 수 있습니다.
치환법으로 살펴보면
치환법으로 살펴보면 다음과 같을 겁니다:
그러므로 inc는 1 더해서 되돌리는 함수입니다.
어흑....ㅜ.ㅜ 알것
어흑....ㅜ.ㅜ
알것 같으면서도 모를것 같은 ..... 머리가 굳었나봐...
한가지만 하면 그렇게 됩니다.
아마 내부 mechanism을 생각하고 계신 것 같은데 그걸 잊고, 그냥 문법이다 생각하시면 어떨까요?
정말 진지하게 알고
정말 진지하게 알고 싶으면, 함수형 언어(lisp, scheme 등) 한가지를 공부해보세요.
그리고, 참고로 gamdora님이 언급하신 치환법(substitution model?)은 SICP 첫부분에 등장했던 것으로 기억합니다.
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
댓글 달기