Tracks
/
Common Lisp
Common Lisp
/
Ejercicios
/
La lasaña de Lilly
La lasaña de Lilly

La lasaña de Lilly

Ejercicio de aprendizaje

Introducción

Funciones

Para definir una función global en Common Lisp se usa la expresión defun. Esta expresión toma como primer argumento una lista de parámetros (una lista vacía significa que la función no tiene parámetros). Después viene una cadena de documentación opcional (ver más abajo) y, luego, cero o más expresiones que forman el «cuerpo» de la función.

Las funciones pueden tener cero o más parámetros.

(defun no-args () (+ 1 1))

(defun add-one (x) (1+ x))

(defun add-nums (x y) (+ x y))

Para llamar a una función, se evalúa una expresión cuyo primer elemento es el símbolo que designa la función y cuyos elementos restantes son los argumentos de la función (si los hay).

El valor al que evalúa una función es el valor de la última expresión evaluada en el cuerpo de la función. Todas las funciones evalúan a un valor.

(add-nums 2 2) ;; => 4

Las funciones también pueden tener, de forma opcional, una cadena de documentación (también llamada «docstring»). Si se incluye, va después de la lista de argumentos, pero antes del cuerpo de la función. Se puede acceder a la cadena de documentación mediante documentation.

(defun add-nums (x y) "Add X and Y together" (+ x y))

(documentation 'add-nums 'function) ;; => "Add X and Y together"

;; Note that if one provides a docstring but fails to provide a body
;; then the docstring is interpreted by Common Lisp as the body, not
;; the docstring
(defun no-body ())
(no-body) ;; => NIL

(defun mistake () "This is not a docstring")
(mistake) ;; => "This is not a docstring"
(documentation 'mistake 'function) ;; => NIL

Instrucciones

¡Lilly, el alien de Lisp, está de vuelta y cocinando más! Esta vez va a crear la lasaña del alien de Lisp, que no es del todo diferente a la lasaña humana.

Lilly va a necesitar que se escriban algunas funciones para ayudarle a calcular los tiempos de cocción de la lasaña. Y cada una necesita tener una buena documentación para que Lilly no olvide qué hace cada una.

¿Puedes ayudar a Lilly a escribir funciones que le ayuden a calcular el tiempo de cocción de la lasaña?

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

Define la función expected-time-in-oven, que no recibe ningún parámetro y devuelve cuántos minutos debe estar la lasaña en el horno. Según la tradición del alien de Lisp (igual que cocinaba la unidad parental de Lilly), el tiempo esperado en el horno, en minutos, es 337:

(expected-time-in-oven) ;; => 337

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

Define la función remaining-minutes-in-oven, que recibe como parámetro los minutos reales que la lasaña ha estado en el horno y devuelve cuántos minutos le quedan por estar en el horno, según el tiempo esperado en el horno, en minutos, de la tarea anterior.

(remaining-minutes-in-oven 100) ;; => 237

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

Define la función preparation-time-in-minutes, que recibe como parámetro el número de capas que Lilly añadió a la lasaña y devuelve cuántos minutos dedicó Lilly a preparar la lasaña, suponiendo que cada capa tarda 19 minutos en prepararse.

(preparation-time-in-minutes 3) ;; => 57

4. Calcula el tiempo transcurrido, en minutos

Define la función elapsed-time-in-minutes, que recibe dos parámetros: el primer parámetro es el número de capas que Lilly añadió a la lasaña, y el segundo parámetro es el número de minutos que la lasaña ha estado en el horno. La función debe devolver cuántos minutos lleva Lilly trabajando en la cocción de la lasaña, que es la suma del tiempo de preparación, en minutos, y el tiempo, en minutos, que la lasaña ha pasado en el horno en ese momento.

(elapsed-time-in-minutes 3 100) ;; => 157
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Common Lisp Exercism

¿Todo listo para empezar La lasaña de Lilly?

Regístrate en Exercism para aprender y dominar Common Lisp con 27 conceptos92 ejercicios y mentoría humana real, todo gratis.