map 안의 map

Scala 예제중에 n 미만의 두 숫자 합이 소수가 되는 조합을 찾아내는 것으로 다음과 같은 것이 있습니다. 물론 나중에 나오는 for 문을 사용하면 다 간단하고 이해하기 쉽겠지요.
List.range(1, n)
  .map(i => List.range(1, i).map(x => (i, x)))
  .foldRight(List([Int, Int])()) { (xs, ys) => xs ::: ys }
  .filter(pair => isPrime(pair._1 + pair._2)
map 문 내부에 map이 있는 것을 보고 ruby에서도 지원해줄지 궁금해서 한번 시험해 보았습니다. 결론은 지원해 주네요. Scala에서 flatMap을 사용하지 않고 foldRight를 써서 엄밀하게 일대일로 대응되는 코드는 아닙니다만.
(1...n).flat_map( |i| (1...i).map { |j| [i, j] }}.select { |i, j| (i+j).prime? }

댓글

이 블로그의 인기 게시물

터미널에서 스칼라 파일 직접 컴파일, 실행

로잉 머신 운동 2달째

curses 라이브러리 간단한 정리