Tracks
/
F#
F#
/
Übungen
/
Pizza-Preise
Pizza-Preise

Pizza-Preise

Lernübung

Einführung

Rekursion

Die Fähigkeit, etwas durch sich selbst zu definieren, nennt man Rekursion. In F# begegnet dir Rekursion am häufigsten in rekursiven Funktionen, also Funktionen, die sich selbst aufrufen.

Eine rekursive Funktion braucht mindestens einen Basisfall und mindestens einen Rekursionsfall. Ein Basisfall gibt einen Wert zurück, ohne die Funktion erneut aufzurufen. Ein Rekursionsfall ruft die Funktion erneut auf und verändert die Eingabe so, dass sie irgendwann zum Basisfall passt.

Rekursive Funktionen werden wie normale Funktionen definiert, aber mit dem rec-Schlüsselwort. Ohne dieses Schlüsselwort kann eine Funktion sich nicht selbst aufrufen, und jeder Versuch, das zu tun, führt zu einem Kompilierungsfehler. Rekursion muss also explizit aktiviert werden.

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

F# unterstützt rekursive Typen auch über diskriminierte Unions. Ein rekursiver diskriminierter Union-Typ hat einen oder mehrere Fälle, die in ihren Daten auf den diskriminierten Union-Typ selbst verweisen. Wie rekursive Funktionen brauchen rekursive Typen einen Basisfall. Anders als rekursive Funktionen verwenden rekursive Typen nicht das rec-Schlüsselwort.

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

Anleitung

In dieser Übung arbeitest du in einer Pizzeria, die an Kunden liefert.

Du bietest drei Pizzaarten an:

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

Kunden können außerdem zwei zusätzliche Optionen gegen eine kleine Zusatzgebühr wählen:

  1. Extrasoße: $1
  2. Extra-Belag: $2

Wenn Kunden eine Bestellung aufgeben, wird eine zusätzliche Gebühr berechnet, wenn sie nur eine oder zwei Pizzen bestellen:

  • 1 Pizza: $3
  • 2 Pizzen: $2

Du hast drei Aufgaben, die sich jeweils mit Pizzen und ihrem Preis beschäftigen.

1. Definiere die Pizzatypen und Optionen

Definiere die diskriminierte Union Pizza, um die Pizzatypen und die beiden zusätzlichen Optionen darzustellen, die einer Pizza hinzugefügt werden können:

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. Berechne den Preis einer Pizza

Implementiere die Funktion pizzaPrice, um den Preis einer Pizza zu berechnen:

pizzaPrice Caprese
// => 9

3. Berechne den Preis einer Bestellung

Implementiere die Funktion orderPrice, um den Preis einer Pizzabestellung zu berechnen:

orderPrice [Margherita; Formaggio]
// => 19
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
F# Exercism

Bereit, mit Pizza-Preise zu starten?

Melde dich bei Exercism an, um F# mit 18 Konzepte148 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.