프로그래밍/프로그래밍언어

[4장 고차함수] 커링함수 - 확장함수 만들기

Hithero 2021. 12. 3. 16:13

지난번에는 일반 함수와 커링함수를 직접 만들어서 구현하였다.

코틀린은 기본함수로 커링을 제공하지 않기때문에, 이를 지원하기 위해 커링함수를 확장함수로 구현해본다.

다음 코드는 매개변수 3개인 함수를 커링함수로 바꾸어주는 함수 코드이다.

fun <P1, P2, P3, R> ((P1,P2,P3)->R).curried() : (P1) -> (P2) -> (P3) -> R = {
	p1:P1 -> {p2:P2 -> {p3:P3 -> this(p1,p2,p3) } }
}
fun <P1, P2, P3, R> ((P1) -> (P2) -> (P3) -> R).uncurried() : (P1,P2,P3)->R= {
	p1:P1, p2:P2, p3:P3 -> this(p1)(p2)(p3)
}

curried 함수를 통해 커링함수 아닌 것을 커링함수로 구현하고, uncurried 함수를 통해 커링함수를 기존 함수로 바꾸어준다.

아래의 예시를 보자.

fun main(args: Array<String>){
	val addTree = {p1 : Int ,p2 : Int ,p3 : Int  -> p1+p2+p3}
    val curried = addThree.curried()
    println(curried(1)(2)(3)) // 6
    println(addThree(1,2,3)) // curried함수와 addThree 함수는 같은 기능을 한다.
}

 

728x90
반응형