Expresiones for
Las expresiones for permiten juntar generadores, filter, map, flatMap, en una sola expresión, para el caso del problema anterior teniamos
- Una funcion esPrimo para validar si un número es primo
- Una función rango que generaba todos los i,j tales 1 <= j < i < n
- APlicamos un filtro a la salida de rango con la función esPrimo Esto como mencionamos era difil de entender, de leer y de mantener, en su lugar vamos a utilizr las expresiones for
scala > val n = 10
scala> for{
| i <- 2 to n
| j <- i until n
| if esPrimo(i+j)
| } yield (i,j)
val res41: IndexedSeq[(Int, Int)] = Vector((2,3), (2,5), (2,9), (3,4), (3,8), (4,7), (4,9), (5,6), (5,8), (6,7), (8,9))
Esta herramienta permite juntar las funciones y aplicar directamente el filtro. Yield es una palabra clave para la generación de coleccion en varios lenguajes de programacion para devolver un generador