힌트
compose 함수는 (Int) -> Int 타입의 함수 두 개를 파라미터로 받아 똑같은 타입의 함수를 반환한다. compose 함수를 fun으로 정의할 수 있지만 함수의 파라미터는 값이어야만 한다. fun으로 정의한 myFunc라는 함수가 있으면 앞에 ::를 붙여서 함수 값으로 변환할 수 있다.
해법
다음은 람다를 사용하는 해법이다.
fun compose(f: (Int) -> Int, g: (Int) -> Int): (Int) -> Int = { x -> f(g(x)) }
또는 다음과 같이 이를 단순화시킬 수 있다.
fun compose(f: (Int) -> Int, g: (Int) -> Int): (Int) -> Int = { f(g(it)) }
이 함수를 사용해 square와 triple 함수를 합성할 수 있다.
val squareOfTriple = compose(::square, ::triple) println(squareOfTriple(2)) 36