더북(TheBook)

2.7.2 로컬 함수 사용하기

클래스나 객체 안에서 함수를 정의할 수 있다. 더 나아가 함수 내부에서도 함수를 정의할 수 있다. 다음 코드는 어떤 수보다 작은 모든 소수의 합계를 구하는 약간 복잡한 함수다. 지금은 이 함수의 동작을 이해하지 못해도 좋다. 나중에 모든 내용을 알게 된다. 다만 여기서 sumOfPrimes 함수 정의 안에 isPrime 함수 정의가 들어간다는 사실을 알아두는 것이 중요하다.

fun sumOfPrimes(limit: Int): Long {
    val seq: Sequence<Long> = sequenceOf(2L) + generateSequence(3L, {
        it + 2
    }).takeWhile{
        it < limit
    }

    fun isPrime(n: Long): Boolean = seq.takeWhile {
        it * it <= n
    }.all {
        n % it != 0L
    }

    return seq.filter(::isPrime).sum()
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.