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()
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.