Tracks
/
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 usando def:

(def fingers 10)

fingers
;;=> 10

Puedes usar defn para definir una función que toma cero o más argumentos. Esta es una función que sumaría 2 números:

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

Esta función toma 2 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 que devuelve siempre es el resultado de evaluar la última expresión del cuerpo, (+ x y). Esta expresión es una lista que representa una llamada a función. El primer elemento de la lista es la función +, que se evalúa usando los siguientes elementos, x y y, como argumentos.

La función add definida arriba se llama de la misma manera:

(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 ningún significado aparte del de dar formato.

Las funciones y las vars de Clojure se organizan en espacios de nombres. Un espacio de nombres agrupa funcionalidad relacionada y se define usando 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 por ; 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 algo de código para ayudarte a cocinar una lasaña espectacular de tu libro de cocina favorito.

Tienes cuatro tareas, todas relacionadas con el tiempo que se dedica a 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 recibe como argumento los minutos que la lasaña lleva realmente en el horno y devuelve cuántos minutos le quedan todavía por estar 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 recibe como argumento la cantidad de capas que le agregaste a la lasaña y devuelve cuántos minutos tardaste en prepararla, suponiendo que cada capa te toma 2 minutos de preparación.

(prep-time 2)
;;=> 4

4. Calcula el tiempo total de trabajo, en minutos

Define la función total-time, que recibe dos argumentos: el primero es la cantidad de capas que le agregaste a la lasaña y el segundo es la cantidad de minutos que la lasaña lleva en el horno. La función debe devolver cuántos minutos en total llevas trabajando en 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 una pestaña nuevas
Clojure Exercism

¿Todo 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.