Percursos
/
Haskell
Haskell
/
Exercícios
/
A lasanha suculenta do Lucian
A lasanha suculenta do Lucian

A lasanha suculenta do Lucian

Exercício de aprendizagem

Introdução

Constantes e funções

Os programas em Haskell são compostos por definições e expressões.

Um valor constante define-se com name = expression.

five = 5

six = 3 + 3

As funções definem-se com name parameters... = expression, sendo os parâmetros separados apenas por espaços.

add number1 number2 = number1 + number2

Invocar uma função também é uma expressão e faz-se indicando o seu nome e passando argumentos para cada um dos parâmetros da função, separados por espaços, tal como nas definições de funções.

five = add 2 3

Podes usar parênteses para especificar a ordem de avaliação de uma expressão.

six = add 2 (1 * 4)

twelve = add 2 1 * 4

Indentação / espaços em branco significativos

O Haskell usa espaços em branco e indentação para delimitar o código. O código que faz parte de uma expressão deve estar mais indentado do que o início dessa expressão.

  • As definições de módulos, de importações e de funções de topo têm de começar na coluna mais à esquerda.
  • Se uma expressão for dividida por várias linhas, o código que faz parte dessa expressão tem de estar indentado sob essa expressão com pelo menos um espaço.
  • As partes da expressão que estão agrupadas devem estar indentadas com o mesmo número de espaços.
-- 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

Os módulos exportam funções. Isso significa que podes usar as funções que o módulo disponibiliza na sua declaração de exportação. Um módulo também pode definir funções apenas para uso interno. Por predefinição, as funções que não são exportadas explicitamente não podem ser usadas a partir de fora do módulo.

No início de um módulo, indicamos o nome do módulo. Se tivermos um ficheiro chamado Calculator.hs, devemos dar ao nosso módulo o nome Calculator. Depois, indicamos as funções que exporta e, a seguir, podemos começar a escrever as funções. Então vamos começar com isto.

module Calculator ( add ) where

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

Comentários

Um comentário é um texto dentro do ficheiro Haskell que não é interpretado como código. Destina-se sobretudo a ser lido por ti e por outros programadores. Existe uma sintaxe simples para comentários de uma só linha, baseada em dois traços. Também é possível fazer comentários de várias linhas com o par de delimitadores de abertura e fecho {- e -}.

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

{- a multiline comment
   spanning multiple lines
-}

Créditos

Esta introdução ao exercício baseia-se generosamente em Learn You a Haskell for Great Good!, sob a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License

Instruções

Neste exercício vais escrever algum código para te ajudar a cozinhar uma lasanha fantástica do teu livro de receitas preferido.

Tens três tarefas, todas relacionadas com o tempo gasto a cozinhar a lasanha.

1. Define o tempo esperado no forno em minutos

Define a constante expectedMinutesInOven para verificar quantos minutos a lasanha deve estar no forno. De acordo com o livro de receitas, o tempo esperado no forno, em minutos, é 40:

expectedMinutesInOven
    --> 40

2. Calcula o tempo de preparação em minutos

Define a função preparationTimeInMinutes, que recebe como parâmetro o número de camadas que adicionaste à lasanha e devolve quantos minutos passaste a preparar a lasanha, assumindo que cada camada demora 2 minutos a preparar.

preparationTimeInMinutes 3
    --> 6

3. Calcula o tempo decorrido em minutos

Define a função elapsedTimeInMinutes, que recebe dois parâmetros: o primeiro parâmetro é o número de camadas que adicionaste à lasanha e o segundo parâmetro é o número de minutos que a lasanha está no forno. A função deve devolver quantos minutos trabalhaste a cozinhar a lasanha, ou seja, a soma do tempo de preparação, em minutos, com o tempo, em minutos, que a lasanha já passou no forno até ao momento.

elapsedTimeInMinutes 3 20
    --> 26
Editar via GitHub A ligação abre numa nova janela ou separador
Haskell Exercism

Estás pronto para começar A lasanha suculenta do Lucian?

Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.