[clojure] 클로저에서의 커링과 재귀 함수
클로저는 함수형 프로그래밍 언어로, 많은 기능들을 지원합니다. 이 중에서도 커링(currying)과 재귀 함수(recursive function)는 클로저의 특징적인 기능 중 하나입니다. 이번 글에서는 클로저에서의 커링과 재귀 함수에 대해 알아보겠습니다.
커링(Currying)
커링은 여러 개의 인자를 받는 함수를 한 개의 인자를 받는 함수들의 연속으로 변환하는 것을 말합니다. 클로저에서는 partial
함수를 사용하여 커링을 구현할 수 있습니다. partial
함수는 함수와 일부 인자를 받아 해당 함수의 커리화된 버전을 생성합니다.
(defn add [x y]
(+ x y))
(def add5 (partial add 5))
(add5 3) ; 8
위 예제에서 add5
는 add
함수의 커리화된 버전으로, 첫 번째 인자로 5를 받아들이는 함수입니다.
재귀 함수(Recursive Function)
클로저에서 재귀 함수는 자기 자신을 호출하여 반복적으로 작업을 수행하는 함수를 말합니다. 클로저에서는 defn
으로 함수를 정의하고, 함수 내에서 recur
키워드를 사용하여 자기 자신을 호출할 수 있습니다.
(defn countdown [n]
(if (<= n 0)
"Blastoff!"
(str n ", " (recur (dec n)))))
(countdown 5) ; "5, 4, 3, 2, 1, Blastoff!"
위 예제는 재귀 함수를 사용하여 5부터 1까지의 숫자를 표시한 후 “Blastoff!”를 반환하는 예제입니다.
결론
클로저에서 커링과 재귀 함수는 함수형 프로그래밍에서 자주 사용되는 중요한 기법들입니다. 커링을 통해 코드의 재사용성을 높이고, 재귀 함수를 통해 간결하고 효율적인 코드를 작성할 수 있습니다.
이상으로 클로저에서의 커링과 재귀 함수에 대해 알아보았습니다.
참고 문헌:
- https://clojure.org/guides/reducers
- https://clojuredocs.org/clojure.core/partial