더북(TheBook)

연습문제 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)이라는 뜻이다. 함수 인자의 개수에는 제한이 없다. 원하는 만큼 많은 인자를 받는 함수를 정의할 수 있다. 이 장의 맨 앞에서 이야기했던 것처럼 여기 보인 addmult와 같은 형태로 정의한 함수를 그와 동등한 튜플을 인자로 받는 함수로부터 커리한 함수라고 부른다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.