Ένα vector στη Clojure είναι μια συλλογή από μηδέν ή περισσότερες τιμές, με σειρά, προσβάσιμη με θέσεις και αμετάβλητη. Αυτό σημαίνει ότι μόλις δημιουργηθεί ένας vector, δεν μπορεί να τροποποιηθεί. Οι συναρτήσεις που δουλεύουν με vector επιστρέφουν έναν νέο vector, ενώ ο αρχικός vector μένει αμετάβλητος. Οι τιμές σε έναν vector μπορούν να είναι διαφορετικών τύπων. Οι vector μπορούν να οριστούν ως εξής:
(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])
Μπορείς να πάρεις τα στοιχεία ενός vector χρησιμοποιώντας τη θέση τους. Οι θέσεις στους vector της Clojure ξεκινούν από το μηδέν, που σημαίνει ότι η θέση του πρώτου στοιχείου είναι πάντα μηδέν:
(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]
Ο αρχικός vector μένει αμετάβλητος:
numbers
;;=> [2 3 5]
Για να κρατήσουμε την ενημερωμένη τιμή, πρέπει να τη μεταφέρουμε παρακάτω ή να την αποθηκεύσουμε σε μια var:
(def updated-numbers
(assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9
Είσαι ένας φανατικός παρατηρητής πουλιών που καταγράφει πόσα πουλιά έχουν επισκεφτεί τον κήπο σου τις τελευταίες επτά μέρες.
Έχεις έξι εργασίες, όλες σχετικές με τους αριθμούς των πουλιών που επισκέφτηκαν τον κήπο σου.
Για λόγους σύγκρισης, κρατάς πάντα κοντά σου ένα αντίγραφο των μετρήσεων της προηγούμενης εβδομάδας, που ήταν: 0, 2, 5, 3, 7, 8 και 4. Δημιούργησε ένα διάνυσμα που να περιέχει τις μετρήσεις της προηγούμενης εβδομάδας:
last-week
;;=> [0 2 5 3 7 8 4]
Υλοποίησε τη συνάρτηση today ώστε να επιστρέφει πόσα πουλιά επισκέφτηκαν τον κήπο σου σήμερα. Οι μετρήσεις των πουλιών είναι ταξινομημένες ανά μέρα, με το πρώτο στοιχείο να είναι η μέτρηση της παλαιότερης μέρας και το τελευταίο στοιχείο να είναι η σημερινή μέτρηση.
(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1
Υλοποίησε τη συνάρτηση inc-bird ώστε να αυξάνει τη σημερινή μέτρηση:
(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]
Υλοποίησε τη συνάρτηση κατηγορήματος day-without-birds? που επιστρέφει true αν υπήρξε μέρα κατά την οποία μηδέν πουλιά επισκέφτηκαν τον κήπο, αλλιώς να επιστρέφει false:
(day-without-birds? birds-per-day)
;;=> true
Υλοποίησε τη συνάρτηση n-days-count που επιστρέφει τον αριθμό των πουλιών που έχουν επισκεφτεί τον κήπο σου από την αρχή της εβδομάδας, αλλά περιορίζοντας τη μέτρηση στον καθορισμένο αριθμό ημερών από την αρχή της εβδομάδας.
(n-days-count birds-per-day 4)
;;=> 14
Μερικές μέρες είναι πιο πολυάσχολες από άλλες. Πολυάσχολη μέρα είναι εκείνη κατά την οποία πέντε ή περισσότερα πουλιά έχουν επισκεφτεί τον κήπο σου.
Υλοποίησε τη συνάρτηση busy-days ώστε να επιστρέφει τον αριθμό των πολυάσχολων ημερών:
(busy-days birds-per-day)
;;=> 2
Τον τελευταίο χρόνο, διαπίστωσες ότι κάποιες εβδομάδες σχηματίζουν το ίδιο, παράξενο πρότυπο, όπου οι μετρήσεις εναλλάσσονται μεταξύ ενός και μηδέν πουλιών που επισκέπτονται τον κήπο. Υλοποίησε τη συνάρτηση odd-week? που επιστρέφει true αν το πρότυπο των μετρήσεων των πουλιών αυτής της εβδομάδας ταιριάζει με το παράξενο πρότυπο:
(odd-week? [1 0 1 0 1 0 1])
;;=> true
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Clojure με 12 έννοιες105 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.