연습문제 3-3
두 Int 값을 더하는 함수를 작성하라.
해법
이 함수는 Int를 인자로 받고 Int에서 Int로 가는 함수를 반환한다. 따라서 이 함수의 타입은 (Int) -> (Int) -> Int다. 이 함수에 add라는 이름을 붙이자. 람다를 사용해 이 함수를 구현할 수 있다. 최종 결과는 다음과 같다.
val add: (Int) -> (Int) -> Int = { a -> { b -> a + b} }
타입 이름을 짧게 하고 싶으면 타입 별명(type alias)을 사용하라.
typealias IntBinOp = (Int) -> (Int) -> Int
val add: IntBinOp = { a -> { b -> a + b} }
val mult: IntBinOp = { a -> { b -> a * b} }
여기서 IntBinOp는 정수 이항 연산(Integer Binary Operation)이라는 뜻이다. 함수 인자의 개수에는 제한이 없다. 원하는 만큼 많은 인자를 받는 함수를 정의할 수 있다. 이 장의 맨 앞에서 이야기했던 것처럼 여기 보인 add나 mult와 같은 형태로 정의한 함수를 그와 동등한 튜플을 인자로 받는 함수로부터 커리한 함수라고 부른다.