Percursos
/
Clojure
Clojure
/
Exercícios
/
A lasanha deliciosa do Lucian
A lasanha deliciosa do Lucian

A lasanha deliciosa do Lucian

Exercício de aprendizagem

Introdução

Em Clojure, associar um valor a um nome designa-se por var. As vars de topo (globais) são semelhantes a constantes noutras linguagens.

As vars de topo definem-se com def:

(def fingers 10)

fingers
;;=> 10

Podes usar defn para definir uma função que recebe zero ou mais argumentos. Esta é uma função que somaria 2 números:

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

Esta função recebe 2 argumentos que são colocados no vetor [x y], seguidos do corpo da função, que pode conter qualquer número de expressões. O valor devolvido é sempre o resultado da avaliação da última expressão do corpo, (+ x y). Esta expressão é uma lista que representa uma chamada de função. O primeiro item da lista é a função +, que é avaliada usando os itens seguintes, x e y, como argumentos.

A função add definida acima é chamada da mesma forma:

(add 2 3)
;;=> 5

Em Clojure, só podes usar funções e valores depois de estarem definidos, ou seja, as formas são sempre avaliadas pela ordem em que aparecem.

Em Clojure, os espaços em branco não têm qualquer significado além da formatação.

As funções e as vars de Clojure organizam-se em namespaces. Um namespace agrupa funcionalidade relacionada e é definido com a macro ns:

(ns calculator)

(def pi 3.14)

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

Clojure suporta dois tipos de comentários. Os comentários de uma linha são precedidos por ; e a forma comment serve para impedir a avaliação de tudo o que está entre (comment e ).

Instruções

Neste exercício vais escrever algum código para te ajudar a cozinhar uma lasanha fabulosa a partir do teu livro de cozinha preferido.

Tens quatro tarefas, todas relacionadas com o tempo gasto a cozinhar a lasanha.

1. Define o tempo esperado no forno, em minutos

Define a var expected-time para verificar quantos minutos a lasanha deve estar no forno. Segundo o livro de cozinha, o tempo esperado no forno, em minutos, é 40:

expected-time
;;=> 40

2. Calcula o tempo restante no forno, em minutos

Define a função remaining-time que recebe como argumento os minutos reais que a lasanha já esteve no forno e devolve quantos minutos a lasanha ainda tem de permanecer no forno, com base no tempo esperado no forno, em minutos, da tarefa anterior.

(remaining-time 30)
;;=> 10

3. Calcula o tempo de preparação, em minutos

Define a função prep-time que recebe como argumento o número de camadas que adicionaste à lasanha e devolve quantos minutos gastaste a preparar a lasanha, assumindo que cada camada demora 2 minutos a preparar.

(prep-time 2)
;;=> 4

4. Calcula o tempo total de trabalho, em minutos

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

(total-time 3 20)
;;=> 26
Editar via GitHub A ligação abre numa nova janela ou separador
Clojure Exercism

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

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