Parcours
/
F#
F#
/
Exercices
/
Tarification des pizzas
Tarification des pizzas

Tarification des pizzas

Exercice d'apprentissage

Introduction

Récursion

La capacité d'une chose à se définir à partir d'elle-même s'appelle la récursion. En F#, la récursion se rencontre le plus souvent dans les fonctions récursives, c'est-à-dire des fonctions qui s'appellent elles-mêmes.

Une fonction récursive doit avoir au moins un cas de base et au moins un cas récursif. Un cas de base renvoie une valeur sans rappeler la fonction. Un cas récursif rappelle la fonction, en modifiant l'entrée pour qu'elle finisse par correspondre au cas de base.

Les fonctions récursives se définissent comme les fonctions classiques, mais avec le modificateur rec. Sans ce modificateur, une fonction ne pourra pas s'appeler elle-même, et toute tentative en ce sens provoquera une erreur de compilation. La récursion doit donc être activée explicitement.

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

F# prend également en charge les types récursifs, via les types d'union discriminée. Dans un type d'union discriminée récursif, un ou plusieurs de ses cas font référence au type d'union discriminée lui-même dans leurs données. Comme les fonctions récursives, les types récursifs doivent avoir un cas de base. Contrairement aux fonctions récursives, les types récursifs n'utilisent pas le mot-clé rec.

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

Instructions

Dans cet exercice, on travaille dans une pizzeria qui livre ses clients.

On propose trois types de pizzas :

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

Les clients peuvent aussi choisir deux options supplémentaires pour un petit supplément :

  1. Sauce supplémentaire : $1
  2. Garnitures supplémentaires : $2

Lorsqu'un client passe une commande, des frais supplémentaires s'ajoutent s'il ne commande qu'une ou deux pizzas :

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

Tu as trois tâches à réaliser, chacune portant sur des pizzas et leur prix.

1. Définis les types de pizzas et les options

Définis l'union discriminée Pizza pour représenter les types de pizzas et les deux options supplémentaires que l'on peut ajouter à une pizza :

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. Calcule le prix d'une pizza

Implémente la fonction pizzaPrice pour calculer le prix d'une pizza :

pizzaPrice Caprese
// => 9

3. Calcule le prix d'une commande

Implémente la fonction orderPrice pour calculer le prix d'une commande de pizzas :

orderPrice [Margherita; Formaggio]
// => 19
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
F# Exercism

Prêt à commencer Tarification des pizzas ?

Inscris-toi sur Exercism pour apprendre et maîtriser F# avec 18 concepts148 exercices, et un vrai mentorat humain, le tout gratuitement.