Saltar a contenido

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

  1. Deseo generar un arreglo de tipo long que contenga los factoriales entre 0 y n. Esta función recibe como argumento a n.

  2. Deseo generar un arreglo de tipo int que 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))
  }

}