더북(TheBook)

이제 실제 구현을 추가한다. 이 구현은 원래 함수 구현의 본문과 같다.

fun <A,B,C,D> curried() =
    { a: A ->
        { b: B ->
            { c: C ->
                { d: D ->
                    "$a, $b, $c, $d"
                }
            }
        }
    }

튜플을 받는 함수라면 어떤 함수든 이 원칙을 적용해 커리한 함수로 변환할 수 있다.

 

연습문제 3-10

(A, B)에서 C로 가는 함수를 커리한 함수로 바꾸는 함수를 작성하라.

이 문제에서도 타입을 따라가면 된다. curry 함수는 (A, B) -> C 타입의 함수를 인자로 받아서 (A) -> (B) -> C 타입의 함수 값을 반환한다. 따라서 시그니처는 다음과 같다.

fun <A, B, C> curry(f: (A, B) -> C): (A) -> (B) -> C
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.