Στη Clojure, οι τιμές Boolean αναπαρίστανται με true ή false.
Οι συναρτήσεις κατηγορήματος (συναρτήσεις που επιστρέφουν μια τιμή Boolean) συνήθως τελειώνουν με ερωτηματικό (?), αλλά αυτό είναι μόνο θέμα σύμβασης.
Η βασική βιβλιοθήκη περιλαμβάνει συναρτήσεις για λογικούς τελεστές, όπως not, and και or.
Σε αυτή την άσκηση, θα υλοποιήσεις τη λογική της αποστολής για ένα νέο παιχνίδι RPG που αναπτύσσει ένας φίλος. Ο κύριος χαρακτήρας του παιχνιδιού είναι η Annalyn, ένα γενναίο κορίτσι με ένα άγριο και πιστό σκυλί. Δυστυχώς, η καταστροφή χτυπά: ο φίλος της απήχθη ενώ έψαχνε για μούρα στο δάσος. Η Annalyn θα προσπαθήσει να βρει και να σώσει τον φίλο της, παίρνοντας προαιρετικά μαζί της το σκυλί της σε αυτή την αποστολή.
Αφού πέρασε κάποιον καιρό ακολουθώντας τα ίχνη, η Annalyn ανακαλύπτει το στρατόπεδο όπου κρατείται ο φίλος της. Αποδεικνύεται ότι υπάρχουν δύο απαγωγείς: ένας πανίσχυρος ιππότης και ένας πονηρός τοξότης.
Έχοντας βρει τους απαγωγείς, η Annalyn σκέφτεται σε ποιες από τις παρακάτω ενέργειες μπορεί να προβεί:
Έχεις τέσσερις εργασίες: να υλοποιήσεις τη λογική που καθορίζει αν οι παραπάνω ενέργειες είναι διαθέσιμες με βάση την κατάσταση των τριών χαρακτήρων στο δάσος και αν το σκυλί της Annalyn είναι παρόν ή όχι.
Υλοποίησε τη συνάρτηση can-fast-attack? που δέχεται μια boolean τιμή που δείχνει αν ο ιππότης είναι ξύπνιος.
Η συνάρτηση επιστρέφει true αν μπορεί να γίνει γρήγορη επίθεση με βάση την κατάσταση του ιππότη.
Διαφορετικά, επιστρέφει false:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
Υλοποίησε τη συνάρτηση can-spy? που δέχεται τρεις boolean τιμές, που δείχνουν αν ο ιππότης, ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι.
Η συνάρτηση επιστρέφει true αν μπορεί να κατασκοπευτεί η ομάδα, με βάση την κατάσταση των τριών χαρακτήρων.
Διαφορετικά, επιστρέφει false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
Υλοποίησε τη συνάρτηση can-signal-prisoner? που δέχεται δύο boolean τιμές, που δείχνουν αν ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι.
Η συνάρτηση επιστρέφει true αν μπορεί να δοθεί σήμα στον κρατούμενο, με βάση την κατάσταση των δύο χαρακτήρων.
Διαφορετικά, επιστρέφει false:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
Υλοποίησε τη συνάρτηση can-free-prisoner? που δέχεται τέσσερις boolean τιμές.
Οι τρεις πρώτες παράμετροι δείχνουν αν ο ιππότης, ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι.
Η τελευταία παράμετρος δείχνει αν το σκυλί της Annalyn είναι παρόν.
Η συνάρτηση επιστρέφει true αν μπορεί να ελευθερωθεί ο κρατούμενος με βάση την κατάσταση των τριών χαρακτήρων και την παρουσία του σκυλιού της Annalyn.
Διαφορετικά, επιστρέφει false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)
(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Clojure με 12 έννοιες105 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.