[clojure] 커링과 일급 함수

이번 글에서는 클로저에서의 커링일급 함수에 대해 알아보도록 하겠습니다.

커링

커링이란, 다항 함수를 인자 하나씩 받는 함수의 연속으로 나타내는 기법을 의미합니다.

예를 들어, 다음과 같은 함수가 있다고 가정해봅시다.

(defn add [x y z]
  (+ x y z))

이 경우 add 함수의 인자를 하나씩 받는 함수로 분리하면 다음과 같은 형태가 됩니다.

(defn add [x]
  (fn [y]
    (fn [z]
      (+ x y z))))

이렇게 하면 add 함수를 아래와 같이 호출할 수 있습니다.

((add 2) 3 4) ; 9

이와 같이 커링을 통해 여러 개의 함수 호출을 간결하게 표현할 수 있습니다.

일급 함수

클로저에서 함수는 일급 함수로 취급됩니다. 이를 통해 함수를 다른 함수의 인자로 전달하거나 함수를 반환하는 함수를 작성할 수 있습니다.

예를 들어, 아래와 같은 함수를 정의할 수 있습니다.

(defn apply-twice [f x]
  (f (f x)))

위의 apply-twice 함수는 주어진 함수 f를 인자 x에 두 번 적용하는 함수입니다.

((apply-twice inc) 2) ; 4

위의 예제에서 inc 함수가 apply-twice 함수에 전달되어 사용되고 있습니다.

이러한 특성을 통해 클로저에서는 함수를 조합하고 변형하는 다양한 패턴을 구현할 수 있습니다.

결론

이로써 클로저에서의 커링일급 함수에 대해 알아보았습니다. 커링은 다항 함수를 인자 하나씩 받는 함수의 연속으로 표현하는 기법이며, 일급 함수는 함수를 다른 함수의 인자로 전달하거나 함수를 반환하는 함수를 작성할 수 있는 특성을 갖고 있습니다.

참고 문헌:


이 포스트가 유용했다면 여러분의 지인들과 공유해보세요!