[컴][웹][자바스크립트] Currying 과 partial function



ref. 1 에서 javascript 에서 currying 이 가능한 curried function 을 만드는 법을 알려준다.

여기서는 좀 각색해서 currying 에 대해 간략하게 알아보자.


Currying

currying 은 Haskell Curry 라는 수학자의 이름에서 따왔다. 또는 schönfinkelisation 라고 부르기도 한다.(이것도 수학자 Moses Schönfinkel 이름에서 따왔다.)[ref. 1]

currying 은 transformation process 다. 즉 function 을 transform 하는 것이다. 어떤 식으로 바꾸는가 하면, 여러개의 argument 를 받아서 값을 구하는 함수를 하나의 argument 를 받아서 값을 구하는 함수를 여러번 반복하는 작업으로 바꾸는 것이다.[ref. 2]


다른 functional language 는 기본적으로 모든 function 이 curry 되지만, javascript 에서는 function 이 curry 가 되도록 해줘야 한다.

거의 같은 parameter 를 사용해서 계속 호출되는 함수가 있다면 currying 을 이용해 볼 수 있다. 곱하기 더하기 같은 녀석들 처럼, 같은 작업을 순서에 상관없이 할 수 있는 녀석들에게 적합한듯 하다.


Partial function

그리고 curryng 이 가능하면 parameter 와 함수를 묶어서 하나의 set 으로 만드는 것이 의미가 있게 되는데, 이렇게 묶은 함수를 partial function 이라고 부르는 듯 하다.

add(1,2)  ==> 3
var addOne = add(1)
addOne(2) ==> 3



currying 및 partial function 의 구현

한번에 여러번 argument 를 받아서 처리하는 함수를 여러개의 함수가 하나씩 argument 를 받도록 하는것이 currying 이라서, 이것의 반대로 처리를 하게 된다.

ref.1 에서 구현한 curried function 을 만들어주는 함수를 보면, argument 를 따로 받아서 이것을 한 번에 함수에 넘겨줄 수 있게 해준다. 소스는 ref.1 을 참고하자.





References

  1. Currying and Partial Functions in JavaScript
  2. http://en.wikipedia.org/wiki/Currying


댓글 없음:

댓글 쓰기