Trilhas
/
F#
F#
/
Exercícios
/
Preço da pizza
Preço da pizza

Preço da pizza

Exercício de aprendizagem

Introdução

Recursão

Chamamos de recursão a capacidade de algo ser definido em termos de si mesmo. Em F#, a recursão aparece com mais frequência em funções recursivas, ou seja, funções que chamam a si mesmas.

Uma função recursiva precisa ter pelo menos um caso base e pelo menos um caso recursivo. Um caso base retorna um valor sem chamar a função de novo. Um caso recursivo chama a função de novo, modificando a entrada para que, em algum momento, ela corresponda ao caso base.

Funções recursivas são definidas como funções normais, mas com o modificador rec. Sem esse modificador, uma função não consegue chamar a si mesma, e qualquer tentativa de fazer isso resulta em um erro de compilação. Por isso, a recursão precisa ser habilitada explicitamente.

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

O F# também dá suporte a tipos recursivos por meio de uniões discriminadas. Em uma união discriminada recursiva, um ou mais casos fazem referência à própria união discriminada nos seus dados. Assim como as funções recursivas, os tipos recursivos precisam ter um caso base. Diferentemente 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, você trabalha em uma pizzaria que faz entregas para os clientes.

Você oferece três tipos de pizza:

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

Os clientes também podem escolher duas opções adicionais por uma pequena taxa extra:

  1. Molho extra: $1
  2. Coberturas extras: $2

Quando os clientes fazem um pedido, uma taxa adicional é cobrada se eles pedirem apenas uma ou duas pizzas:

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

Você tem três tarefas, e cada uma delas trabalha com pizzas e seus preços.

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

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

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. Calcule o preço da pizza

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

pizzaPrice Caprese
// => 9

3. Calcule o preço de um pedido

Implemente a função orderPrice para calcular o preço de um pedido de pizza:

orderPrice [Margherita; Formaggio]
// => 19
Editar via GitHub O link abre em uma nova janela ou aba
F# Exercism

Tudo pronto para começar Preço da pizza?

Crie sua conta no Exercism para aprender e dominar F# com 18 conceitos148 exercícios e mentoria humana de verdade, tudo de graça.