Percursos
/
F#
F#
/
Exercícios
/
Preços de pizza
Preços de pizza

Preços de pizza

Exercício de aprendizagem

Introdução

Recursão

A capacidade de algo ser definido em termos de si mesmo chama-se recursão. Em F#, a recursão aparece mais frequentemente em funções recursivas, que são funções que se chamam a si próprias.

Uma função recursiva tem de ter pelo menos um caso base e pelo menos um caso recursivo. Um caso base devolve um valor sem voltar a chamar a função. Um caso recursivo volta a chamar a função, modificando o valor de entrada para que, em algum momento, este corresponda ao caso base.

As funções recursivas definem-se como as funções normais, mas com o modificador rec. Sem este modificador, uma função não consegue chamar-se a si própria e qualquer tentativa de o fazer resultará num erro de compilação. Por isso, é preciso optar explicitamente pela recursão.

let rec factorial x =
    // Base case
    if x = 1 then
        1
    // Recursive case
    else
        x * factorial (x - 1)

F# também suporta tipos recursivos através de tipos de união discriminada. Um tipo de união discriminada recursivo tem um ou mais casos que se referem ao próprio tipo de união discriminada nos seus dados. Tal como as funções recursivas, os tipos recursivos têm de ter um caso base. Ao contrário das funções recursivas, os tipos recursivos não usam a palavra-chave rec.

type RussianDoll =
    | Doll                 // Base case
    | Layer of RussianDoll // Recursive case

Instruções

Neste exercício, trabalhas numa pizzaria que faz entregas ao domicílio.

Ofereces três tipos de pizza:

  • Margherita: $7
  • Caprese: $9
  • Formaggio: $10

Os clientes podem também escolher duas opções adicionais por um pequeno custo extra:

  1. Molho extra: $1
  2. Ingredientes extra: $2

Quando os clientes fazem uma encomenda, é acrescentada uma taxa adicional se encomendarem apenas uma ou duas pizzas:

  • 1 pizza: $3
  • 2 pizzas: $2

Tens três tarefas, cada uma delas sobre pizzas e o seu preço.

1. Define os tipos de pizza e as opções

Define a união discriminada Pizza para representar os tipos de pizza e as duas opções adicionais que podem ser acrescentadas a uma pizza:

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. Calcula o preço da pizza

Implementa a função pizzaPrice para calcular o preço de uma pizza:

pizzaPrice Caprese
// => 9

3. Calcula o preço de uma encomenda

Implementa a função orderPrice para calcular o preço de uma encomenda de pizzas:

orderPrice [Margherita; Formaggio]
// => 19
Editar via GitHub A ligação abre numa nova janela ou separador
F# Exercism

Estás pronto para começar Preços de pizza?

Inscreve-te no Exercism para aprenderes e dominares F# com 18 conceitos148 exercícios, e mentoria humana real, tudo grátis.