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

La deliciosa lasaña de Lucian

Ejercicio de aprendizaje

Introducción

Constantes y funciones

Los programas de Haskell se componen de definiciones y expresiones.

Un valor constante se define con name = expression.

five = 5

six = 3 + 3

Las funciones se definen con name parameters... = expression, y los parámetros solo se separan por espacios.

add number1 number2 = number1 + number2

Llamar a una función también es una expresión y se hace especificando su nombre y pasando argumentos para cada uno de los parámetros de la función, separados por espacios, igual que en las definiciones de funciones.

five = add 2 3

Los paréntesis pueden usarse para especificar el orden de evaluación de una expresión.

six = add 2 (1 * 4)

twelve = add 2 1 * 4

Indentación / espacios en blanco significativos

Haskell usa espacios en blanco y sangría para delimitar el código. El código que forma parte de una expresión debe tener más sangría que el comienzo de esa expresión.

  • Las definiciones de módulos, importaciones y funciones de nivel superior deben empezar en la columna más a la izquierda.
  • Si una expresión se divide en varias líneas, el código que forma parte de esa expresión debe tener una sangría de al menos un espacio por debajo de esa expresión.
  • Las partes de la expresión que van agrupadas deben tener la misma cantidad de espacios de sangría.
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
    number1 + number2

https://en.wikibooks.org/wiki/Haskell/Indentation

Módulos

Los módulos exportan funciones. Eso significa que puedes usar las funciones que el módulo pone a disposición en su declaración de exportación. Un módulo también puede definir funciones solo para uso interno. De forma predeterminada, las funciones que no se exportan explícitamente no se pueden usar desde fuera del módulo.

Al principio de un módulo, especificamos el nombre del módulo. Si tenemos un fichero llamado Calculator.hs, debemos llamar a nuestro módulo Calculator. Después, especificamos las funciones que exporta y, a partir de ahí, podemos empezar a escribir las funciones. Así que empezaremos con esto.

module Calculator ( add ) where

https://learnyouahaskell.github.io/modules#making-our-own-modules

Comentarios

Un comentario es un texto dentro del fichero de Haskell que no se interpreta como código. Está pensado principalmente para que lo lean tú y otros programadores. Existe una sintaxis ligera para los comentarios de una sola línea, basada en guiones dobles. También son posibles los comentarios multilínea con el par de delimitadores de apertura y cierre {- y -}.

-- a single line comment
-- another single line comment

{- a multiline comment
   spanning multiple lines
-}

Créditos

Esta introducción al ejercicio toma prestado generosamente de Learn You a Haskell for Great Good!, bajo la Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License

Instrucciones

En este ejercicio vas a escribir código para ayudarte a cocinar una lasaña magnífica con tu libro de cocina favorito.

Tienes tres 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 constante expectedMinutesInOven 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:

expectedMinutesInOven
    --> 40

2. Calcula el tiempo de preparación en minutos

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

preparationTimeInMinutes 3
    --> 6

3. Calcula el tiempo transcurrido en minutos

Define la función elapsedTimeInMinutes, que toma dos parámetros: el primer parámetro 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 has trabajado en cocinar la lasaña, que es 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.

elapsedTimeInMinutes 3 20
    --> 26
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Haskell Exercism

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

Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.