Rutas
/
Clojure
Clojure
/
Ejercicios
/
La deliciosa lasaña de Lucian
La deliciosa lasaña de Lucian

La deliciosa lasaña de Lucian

Ejercicio de aprendizaje

Introducción

En Clojure, vincular un valor a un nombre se conoce como var. Las vars de nivel superior (globales) son similares a las constantes de otros lenguajes.

Las vars de nivel superior se definen con def:

(def fingers 10)

fingers
;;=> 10

Puedes usar defn para definir una función que recibe cero o más argumentos. Esta es una función que suma dos números:

(defn add [x y]
  (+ x y))

Esta función recibe dos argumentos que se colocan en el vector [x y], seguidos del cuerpo de la función, que puede contener cualquier número de expresiones. El valor devuelto es siempre el resultado de evaluar la última expresión del cuerpo, (+ x y). Esta expresión es una lista que representa una llamada a una función. El primer elemento de la lista es la función +, que se evalúa usando los siguientes elementos, x e y, como argumentos.

La función add definida antes se llama de la misma forma:

(add 2 3)
;;=> 5

Las funciones y los valores en Clojure solo se pueden usar después de haber sido definidos, es decir, las formas siempre se evalúan en el orden en que aparecen.

En Clojure, los espacios en blanco no tienen ninguna relevancia más allá del formato.

Las funciones y las vars de Clojure se organizan en namespaces. Un namespace agrupa funcionalidad relacionada y se define con la macro ns:

(ns calculator)

(def pi 3.14)

(defn add [x y]
  (+ x y))

Clojure admite dos tipos de comentarios. Los comentarios de una sola línea van precedidos de ;, y la forma comment se usa para evitar la evaluación de todo lo que hay entre (comment y ).

Instrucciones

En este ejercicio vas a escribir código para ayudarte a cocinar una lasaña espectacular sacada de tu libro de cocina favorito.

Tienes cuatro tareas, todas relacionadas con el tiempo que se tarda en cocinar la lasaña.

1. Define el tiempo esperado en el horno, en minutos

Define la variable expected-time para comprobar cuántos minutos debe estar la lasaña en el horno. Según el libro de cocina, el tiempo esperado en el horno es de 40 minutos:

expected-time
;;=> 40

2. Calcula el tiempo restante en el horno, en minutos

Define la función remaining-time, que toma como argumento los minutos que la lasaña lleva ya en el horno y devuelve cuántos minutos tiene que seguir todavía en el horno, según el tiempo esperado en el horno de la tarea anterior.

(remaining-time 30)
;;=> 10

3. Calcula el tiempo de preparación, en minutos

Define la función prep-time, que toma como argumento el número de capas que has añadido a la lasaña y devuelve cuántos minutos has tardado en prepararla, suponiendo que cada capa te lleva 2 minutos.

(prep-time 2)
;;=> 4

4. Calcula el tiempo total de trabajo, en minutos

Define la función total-time, que toma dos argumentos: el primero es el número de capas que has añadido a la lasaña y el segundo es el número de minutos que la lasaña lleva en el horno. La función debe devolver cuántos minutos en total has dedicado a cocinar la lasaña, es decir, la suma del tiempo de preparación, en minutos, y el tiempo, en minutos, que la lasaña lleva en el horno en ese momento.

(total-time 3 20)
;;=> 26
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Clojure Exercism

¿Listo para empezar La deliciosa lasaña de Lucian?

Regístrate en Exercism para aprender y dominar Clojure con 12 conceptos105 ejercicios y mentoría humana real, todo gratis.