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

    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
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.