Track
/
F#
F#
/
Esercizi
/
Prezzo della pizza
Prezzo della pizza

Prezzo della pizza

Esercizio di apprendimento

Introduzione

Ricorsione

La capacità di una cosa di essere definita in termini di se stessa si chiama ricorsione. In F#, la ricorsione si trova più comunemente nelle funzioni ricorsive, cioè nelle funzioni che chiamano se stesse.

Una funzione ricorsiva deve avere almeno un caso base e almeno un caso ricorsivo. Un caso base restituisce un valore senza chiamare di nuovo la funzione. Un caso ricorsivo chiama di nuovo la funzione, modificando l'input in modo che a un certo punto corrisponda al caso base.

Le funzioni ricorsive si definiscono come le funzioni normali, ma con il modificatore rec. Senza questo modificatore, una funzione non sarà in grado di chiamare se stessa e qualsiasi tentativo di farlo produrrà un errore di compilazione. La ricorsione va quindi attivata esplicitamente.

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

F# supporta anche i tipi ricorsivi tramite le unioni discriminate. In un'unione discriminata ricorsiva, uno o più dei suoi casi fanno riferimento al tipo unione discriminata stesso all'interno dei loro dati. Come le funzioni ricorsive, anche i tipi ricorsivi devono avere un caso base. A differenza delle funzioni ricorsive, però, i tipi ricorsivi non usano la parola chiave rec.

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

Istruzioni

In questo esercizio lavorerai in una pizzeria che consegna ai clienti.

Offri tre tipi di pizza:

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

I clienti possono anche scegliere due opzioni aggiuntive a fronte di un piccolo costo extra:

  1. Salsa extra: $1
  2. Ingredienti extra: $2

Quando i clienti effettuano un ordine, viene aggiunto un costo aggiuntivo se ordinano solo una o due pizze:

  • 1 pizza: $3
  • 2 pizze: $2

Hai tre compiti, ognuno dei quali lavorerà con le pizze e il loro prezzo.

1. Definisci i tipi di pizza e le opzioni

Definisci l'unione discriminata Pizza per rappresentare i tipi di pizza e le due opzioni aggiuntive che si possono aggiungere a una pizza:

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. Calcola il prezzo di una pizza

Implementa la funzione pizzaPrice per calcolare il prezzo di una pizza:

pizzaPrice Caprese
// => 9

3. Calcola il prezzo di un ordine

Implementa la funzione orderPrice per calcolare il prezzo di un ordine di pizze:

orderPrice [Margherita; Formaggio]
// => 19
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
F# Exercism

Vuoi iniziare Prezzo della pizza?

Iscriviti a Exercism per imparare e padroneggiare F# con 18 concetti148 esercizi e il mentoring di persone reali, tutto gratis.