Διαδρομές
/
F#
F#
/
Ασκήσεις
/
Παιχνίδι μαντεψιάς
Παιχνίδι μαντεψιάς

Παιχνίδι μαντεψιάς

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

Εισαγωγή

Αντιστοίχιση προτύπων

Μια έκφραση if/elif/else μπορεί να χρησιμοποιηθεί για να εκτελέσεις λογική υπό συνθήκη. Η F# έχει όμως και έναν άλλο, πιο ισχυρό τρόπο για να εκτελείς λογική υπό συνθήκη: την αντιστοίχιση προτύπων. Με την αντιστοίχιση προτύπων, μια τιμή μπορεί να ελεγχθεί ως προς ένα ή περισσότερα πρότυπα. Ένα παράδειγμα τέτοιου προτύπου είναι το σταθερό πρότυπο, το οποίο αντιστοιχίζει μια τιμή με μια σταθερά (π.χ. 1 ή "hello").

Στην F#, η αντιστοίχιση προτύπων γίνεται με τη λέξη-κλειδί match:

let describe number =
    match number with
    | 0 -> "Zero"
    | 1 -> "One"

Αν και αυτό μπορεί να μοιάζει με εντολές switch σε άλλες γλώσσες, η αντιστοίχιση προτύπων αρχίζει να λάμπει όταν χρησιμοποιείς και άλλα πρότυπα. Ένα τέτοιο πρότυπο είναι το πρότυπο μεταβλητής, το οποίο σου επιτρέπει να συλλάβεις μια τιμή:

match number with
| 0 -> "Zero"
| i -> sprintf "Non zero: %d" i

Σε ορισμένες περιπτώσεις, μπορεί να θέλεις να προσθέσεις μια επιπλέον συνθήκη σε ένα πρότυπο. Αυτό είναι γνωστό ως φρουρός (ρήτρα), ο οποίος μπορεί να προστεθεί με τη λέξη-κλειδί when:

match number with
| 0 -> "Zero"
| i when i < 0 -> "Negative number"

Στο παραπάνω παράδειγμα, δεν θα αντιστοιχιστεί κάθε πιθανή είσοδος με κάποιο πρότυπο. Ο μεταγλωττιστής θα το εντοπίσει και θα εμφανίσει μια προειδοποίηση. Αυτό είναι γνωστό ως εξαντλητικός έλεγχος. Για να λύσεις την προειδοποίηση, πρέπει να χειριστείς όλες τις περιπτώσεις. Γι' αυτό μπορείς να χρησιμοποιήσεις το πρότυπο μπαλαντέρ, ένα πρότυπο που ταιριάζει με οποιαδήποτε τιμή:

match number with
| i when i < 0 -> "Negative number"
| _ -> "Positive number"

// No compiler warning

Η αντιστοίχιση προτύπων ελέγχει μια τιμή ως προς κάθε πρότυπο από πάνω προς τα κάτω, μέχρι να βρει ένα πρότυπο που ταιριάζει και να εκτελέσει τη λογική που σχετίζεται με αυτό το πρότυπο. Η σειρά των προτύπων έχει σημασία!

Οδηγίες

Σε αυτή την άσκηση, παίζεις ένα παιχνίδι μαντεψιάς αριθμών με έναν φίλο σου. Οι κανόνες είναι απλοί: διαλέγεις κρυφά έναν αριθμό ανάμεσα στο 1 και στο 100 και ο φίλος σου προσπαθεί να μαντέψει ποιον αριθμό διάλεξες. Για να βοηθήσεις τον φίλο σου, απαντάς διαφορετικά ανάλογα με το πόσο κοντά ήταν η μαντεψιά στον αριθμό που διάλεξες (42). Αυτοί είναι οι κανόνες για τις διάφορες απαντήσεις:

  • Αν η μαντεψιά είναι 42: "Correct"
  • Αν η μαντεψιά είναι 41 ή 43: "So close"
  • Αν η μαντεψιά είναι μικρότερη από 41: "Too low"
  • Αν η μαντεψιά είναι μεγαλύτερη από 43: "Too high"

Έχεις τέσσερις εργασίες για να κωδικοποιήσεις τις απαντήσεις στις μαντεψιές.

1. Απάντησε σε μια σωστή μαντεψιά

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

reply 42
// => "Correct"

2. Απάντησε σε μια κοντινή μαντεψιά

Τροποποίησε τη συνάρτηση reply για να απαντήσεις σε κοντινές μαντεψιές:

reply 41
// => "So close"

3. Απάντησε σε πολύ χαμηλές μαντεψιές

Τροποποίησε τη συνάρτηση reply για να απαντήσεις σε πολύ χαμηλές μαντεψιές:

reply 25
// => "Too low"

4. Απάντησε σε πολύ υψηλές μαντεψιές

Τροποποίησε τη συνάρτηση reply για να απαντήσεις σε πολύ υψηλές μαντεψιές:

reply 88
// => "Too high"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
F# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Παιχνίδι μαντεψιάς;

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