Explorando lenguajes de programación

El propósito de esta notebook es que la utilicen para explorar distintos lenguajes de programación. No están limitados a las celdas que abrí, también pueden crear celdas de otros lenguajes que están disponible cuando hacen click en el ícono +

Así que ¡diviértanse! (Y recuerden tratar de realizar la función de potencia en uno de los dos lenguajes de abajo, Racket o Python).

Java

/**
Calcula la potencia de un número x, siempre y cuando el exponente sea un número natural
*/
public double potencia(double base, int expt) throws IllegalArgumentException{
  if(expt < 0) throw new IllegalArgumentException("El exponente debe ser un número natural");
  double res = 1.0;
  while(expt >= 1){
    res*=base;
    expt--;
  }
return res;
} 
2.8s
Math.pow(-2,-32)
0.4s
potencia(-2, -32)
0.3s

Scala

 def potencia(base:Double , expt:Int): Either[String,Double] = { 
  if(expt < 0) Left("El exponente debe ser un número natural")
    else Right({
      val vec = for(i <- 1 to expt) yield base
      vec.foldLeft(1.0)((a,b) => a*b)  
    })
 }
11.1s
potencia(3,6)
1.5s
java.lang.Math.pow(6,6)
0.9s
potencia(6,6)
1.2s

Julia

function potencia(a, b)
  reduce(*, repeat([a],b))
end
0.2s

Clojure

(defn potencia
  [base expt]
  (if (< expt 0)
    "El exponente debe ser un numero natural"
  (->> (repeat base) 
    (take expt)
    (reduce *))))
0.1s
(potencia 9 -12)
0.1s
(Math/pow 9 12)
0.1s

Python

# Descomente (es decir, borre el símbolo #) y complete la función
# def potencia(base,expt):
    
  
0.1s

Racket

; Complete la función. Arrojará error si se evalúa porque falta el cuerpo.
(define (potencia base expt)
  )
0.4s
Runtimes (6)
Runtime Languages (12)