Στη F#, οι Boolean τιμές αναπαρίστανται από τον τύπο bool, οι τιμές του οποίου μπορούν να είναι είτε true είτε false.
Η F# υποστηρίζει τρεις τελεστές Boolean: not (ΟΧΙ), && (ΚΑΙ) και || (Ή).
Σε αυτή την άσκηση, θα υλοποιήσεις τη λογική της αποστολής για ένα νέο παιχνίδι RPG που αναπτύσσει ένας φίλος σου. Ο κεντρικός χαρακτήρας του παιχνιδιού είναι η Annalyn, ένα γενναίο κορίτσι με ένα άγριο και πιστό σκυλί. Δυστυχώς, όμως, η καταστροφή χτυπά: ο καλύτερός της φίλος απήχθη ενώ έψαχνε για μούρα στο δάσος. Η Annalyn θα προσπαθήσει να τον βρει και να τον ελευθερώσει, παίρνοντας προαιρετικά μαζί της το σκυλί της σε αυτή την αποστολή.
Αφού πέρασε λίγο καιρό ακολουθώντας τα ίχνη του καλύτερού της φίλου, βρίσκει το στρατόπεδο στο οποίο κρατείται. Αποδεικνύεται ότι υπάρχουν δύο απαγωγείς: ένας πανίσχυρος ιππότης και ένας πονηρός τοξότης.
Έχοντας βρει τους απαγωγείς, η Annalyn σκέφτεται ποιες από τις παρακάτω ενέργειες μπορεί να κάνει:
Έχεις τέσσερις εργασίες: να υλοποιήσεις τη λογική που καθορίζει αν οι παραπάνω ενέργειες είναι διαθέσιμες, με βάση την κατάσταση των τριών χαρακτήρων που βρίσκονται στο δάσος και το αν το σκυλί της Annalyn είναι παρόν ή όχι.
Υλοποίησε τη συνάρτηση canFastAttack που παίρνει μια boolean τιμή η οποία δείχνει αν ο ιππότης είναι ξύπνιος. Η συνάρτηση επιστρέφει true αν μπορεί να γίνει γρήγορη επίθεση με βάση την κατάσταση του ιππότη. Διαφορετικά, επιστρέφει false:
let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false
Υλοποίησε τη συνάρτηση canSpy που παίρνει τρεις boolean τιμές, που δείχνουν αν ο ιππότης, ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν μπορεί να κατασκοπευτεί η ομάδα, με βάση την κατάσταση των τριών χαρακτήρων. Διαφορετικά, επιστρέφει false:
let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true
Υλοποίησε τη συνάρτηση canSignalPrisoner που παίρνει δύο boolean τιμές, που δείχνουν αν ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν μπορεί να σταλεί σήμα στον κρατούμενο, με βάση την κατάσταση των δύο χαρακτήρων. Διαφορετικά, επιστρέφει false:
let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true
Υλοποίησε τη συνάρτηση canFreePrisoner που παίρνει τέσσερις boolean τιμές. Οι τρεις πρώτες παράμετροι δείχνουν αν ο ιππότης, ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η τελευταία παράμετρος δείχνει αν το σκυλί της Annalyn είναι παρόν. Η συνάρτηση επιστρέφει true αν μπορεί να ελευθερωθεί ο κρατούμενος με βάση την κατάσταση των τριών χαρακτήρων και την παρουσία του σκυλιού της Annalyn. Διαφορετικά, επιστρέφει false:
let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Γράψου στο Exercism για να μάθεις και να κατακτήσεις F# με 18 έννοιες148 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.