Διαδρομές
/
F#
F#
/
Ασκήσεις
/
Τιμολόγηση πίτσας
Τιμολόγηση πίτσας

Τιμολόγηση πίτσας

Άσκηση εκμάθησης

Εισαγωγή

Αναδρομή

Η δυνατότητα κάτι να ορίζεται με βάση τον εαυτό του ονομάζεται αναδρομή. Στην F#, η αναδρομή συναντάται πιο συχνά σε αναδρομικές συναρτήσεις, δηλαδή συναρτήσεις που καλούν τον εαυτό τους.

Μια αναδρομική συνάρτηση πρέπει να έχει τουλάχιστον μία βασική περίπτωση και τουλάχιστον μία αναδρομική περίπτωση. Μια βασική περίπτωση επιστρέφει μια τιμή χωρίς να καλέσει ξανά τη συνάρτηση. Μια αναδρομική περίπτωση καλεί ξανά τη συνάρτηση, τροποποιώντας την είσοδο έτσι ώστε κάποια στιγμή να ταιριάξει με τη βασική περίπτωση.

Οι αναδρομικές συναρτήσεις ορίζονται όπως οι κανονικές συναρτήσεις, αλλά με τον τροποποιητή rec. Χωρίς αυτόν τον τροποποιητή, μια συνάρτηση δεν θα μπορεί να καλέσει τον εαυτό της και κάθε απόπειρα να το κάνει θα καταλήξει σε σφάλμα μεταγλώττισης. Η αναδρομή, επομένως, πρέπει να δηλώνεται ρητά.

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

Η F# υποστηρίζει επίσης αναδρομικούς τύπους μέσω τύπων διάκριτης ένωσης. Ένας αναδρομικός τύπος διάκριτης ένωσης έχει μία ή περισσότερες από τις περιπτώσεις του να αναφέρονται στα δεδομένα τους στον ίδιο τον τύπο διάκριτης ένωσης. Όπως οι αναδρομικές συναρτήσεις, έτσι και οι αναδρομικοί τύποι πρέπει να έχουν μια βασική περίπτωση. Σε αντίθεση με τις αναδρομικές συναρτήσεις, οι αναδρομικοί τύποι δεν χρησιμοποιούν τη λέξη-κλειδί rec.

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

Οδηγίες

Σε αυτή την άσκηση δουλεύεις σε ένα μαγαζί με πίτσες που κάνει παράδοση σε πελάτες.

Προσφέρεις τρεις τύπους πίτσας:

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

Οι πελάτες μπορούν επίσης να διαλέξουν δύο επιπλέον επιλογές με μια μικρή επιπλέον χρέωση:

  1. Επιπλέον σάλτσα: $1
  2. Επιπλέον υλικά: $2

Όταν οι πελάτες κάνουν παραγγελία, προστίθεται μια επιπλέον χρέωση αν παραγγείλουν μόνο μία ή δύο πίτσες:

  • 1 πίτσα: $3
  • 2 πίτσες: $2

Έχεις τρεις εργασίες, καθεμία από τις οποίες θα δουλέψει με πίτσες και την τιμή τους.

1. Όρισε τους τύπους πίτσας και τις επιλογές

Όρισε τη διακριτή ένωση Pizza ώστε να αναπαριστά τους τύπους πίτσας και τις δύο επιπλέον επιλογές που μπορούν να προστεθούν σε μια πίτσα:

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. Υπολόγισε την τιμή της πίτσας

Υλοποίησε τη συνάρτηση pizzaPrice για να υπολογίζει την τιμή μιας πίτσας:

pizzaPrice Caprese
// => 9

3. Υπολόγισε την τιμή μιας παραγγελίας

Υλοποίησε τη συνάρτηση orderPrice για να υπολογίζει την τιμή μιας παραγγελίας:

orderPrice [Margherita; Formaggio]
// => 19
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
F# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Τιμολόγηση πίτσας;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις F# με 18 έννοιες148 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.