더북(TheBook)

이 경우에는 가격이 첫 번째 인자다. 가격만 적용한 부분 함수는 그다지 쓸모가 없다. 하지만 이런 함수에 대해 어떻게 세율을 먼저 적용할 수 있을까? (구현 소스 코드를 손댈 수 없다고 가정하자.)

 

연습문제 3-11

커리한 함수의 두 인자의 순서를 뒤바꾼 새로운 함수를 반환하는 fun 함수를 작성하라.

해법

다음 함수는 커리한 함수의 인자 순서가 뒤바뀐 새로운 커리한 함수를 반환한다. 이 방법을 사용하면 인자의 수와 관계없이 원하는 순서대로 인자 순서를 재배열할 수 있다.

fun <T, U, V> swapArgs(f: (T) -> (U) -> V): (U) -> (T) -> (V) =
    { u -> { t -> f(t)(u) } }

이 함수가 있으면 두 인자 중 아무것이나 부분 적용할 수 있다. 예를 들어 이자율과 원금을 받아서 매달 납입해야 하는 금액을 계산하는 함수가 있다고 하자.

val payment = { amount -> { rate -> ... } }

원금을 고정하고 이율이 변함에 따라 월 납입액이 어떻게 달라지는지 계산하는 함수를 쉽게 만들 수 있다. 반대로 정해진 이율에 대해 원금이 달라질 때마다 월 납입액이 어떻게 변하는지 계산하는 함수도 쉽게 만들 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.