Introducción¶
Debe tenerse en cuenta que Scala es una libreria dentro de Java, por lo que toma elementos de este lenguaje y su comportamiento.
La sintaxis varia un poco
public int cosita(x long){
}
def cosita(x:Long):Int = {
}
En programación funcional usaremos val y def para definir variables y funciones inmutables
No vamos utilizar estructuras iterativas for, while. Tampoc vamos a utilizar return, continue ni break
Ejercicio¶
-
Deseo generar un arreglo de tipo
longque contenga los factoriales entre 0 y n. Esta función recibe como argumento a n. -
Deseo generar un arreglo de tipo
intque tenga los números primos entre n y m, donde n ≤ m, usando recursión.
/*
* This Scala source file was generated by the Gradle 'init' task.
*/
package taller
object App {
def factorial(n: Int): Long = {
if (n==0) 1L
else n*factorial(n-1)
}
def listaFactorial(n: Int):List[Long] = {
if (n==0) List(factorial(0))
else listaFactorial(n-1) :+ factorial(n)
}
def esPrimo(n:Int):Boolean = {
//Verificar los divisores entre 2 y raiz(n)
val divisores = (2 to Math.ceil(Math.sqrt(n)).toInt).filter(x => n%x == 0)
n==2 || divisores.size == 0
}
def listaPrimos(n:Int, m:Int):List[Int] = {
if (n > m) List()
else{
if (esPrimo(n)) n :: listaPrimos(n+1,m)
else listaPrimos(n+1,m)
}
}
def main(args: Array[String]): Unit = {
println(listaFactorial(10))
println(esPrimo(2))
println(esPrimo(97))
println(esPrimo(98))
println(listaPrimos(2,100))
println(listaPrimos(1000,2000))
}
}