[컴][웹][자바스크립트] 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]

예를 들면

a(1, 2, 3)

|
V

x(1)(2)(3)

|
| --> curry가 되면, partial function 을 만들 수 있다.
V

var newFunc = x(1)
newFunc(2)(3)
newFunc(3)(4)

다른 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

댓글 없음:

댓글 쓰기