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()
}