Στην Clojure, η δέσμευση μιας τιμής σε ένα όνομα ονομάζεται var. Οι var κορυφαίου επιπέδου (καθολικές) μοιάζουν με τις σταθερές σε άλλες γλώσσες.
Οι var κορυφαίου επιπέδου ορίζονται με το def:
(def fingers 10)
fingers
;;=> 10
Μπορείς να χρησιμοποιήσεις το defn για να ορίσεις μια συνάρτηση που δέχεται μηδέν ή περισσότερα ορίσματα. Αυτή είναι μια συνάρτηση που προσθέτει 2 αριθμούς μεταξύ τους:
(defn add [x y]
(+ x y))
Αυτή η συνάρτηση δέχεται 2 ορίσματα, τα οποία τοποθετούνται στο διάνυσμα [x y], και στη συνέχεια ακολουθεί το σώμα της συνάρτησης, το οποίο μπορεί να περιέχει οποιονδήποτε αριθμό εκφράσεων. Η τιμή επιστροφής είναι πάντα το αποτέλεσμα της αξιολόγησης της τελευταίας έκφρασης στο σώμα, (+ x y). Αυτή η έκφραση είναι μια λίστα που αντιπροσωπεύει μια κλήση συνάρτησης. Το πρώτο στοιχείο της λίστας είναι η συνάρτηση +, η οποία αξιολογείται χρησιμοποιώντας τα επόμενα στοιχεία x και y ως ορίσματα.
Η συνάρτηση add που ορίστηκε παραπάνω καλείται με τον ίδιο τρόπο:
(add 2 3)
;;=> 5
Οι συναρτήσεις και οι τιμές στην Clojure μπορούν να χρησιμοποιηθούν μόνο αφού οριστούν, δηλαδή τα forms αξιολογούνται πάντα με τη σειρά που εμφανίζονται.
Στην Clojure, τα κενά δεν έχουν καμία σημασία πέρα από τη μορφοποίηση.
Οι συναρτήσεις και οι var της Clojure οργανώνονται σε namespaces. Ένα namespace ομαδοποιεί σχετική λειτουργικότητα και ορίζεται με τη μακροεντολή ns:
(ns calculator)
(def pi 3.14)
(defn add [x y]
(+ x y))
Η Clojure υποστηρίζει δύο τύπους σχολίων. Τα σχόλια μίας γραμμής ξεκινούν με ; και η μορφή comment χρησιμοποιείται για να αποτρέψει την αξιολόγηση όλων όσων βρίσκονται ανάμεσα στο (comment και το ).
Σε αυτή την άσκηση θα γράψεις λίγο κώδικα για να σε βοηθήσει να φτιάξεις υπέροχα λαζάνια από το αγαπημένο σου βιβλίο μαγειρικής.
Έχεις τέσσερις εργασίες, όλες σχετικές με τον χρόνο που χρειάζεται για το μαγείρεμα των λαζανιών.
Όρισε τη μεταβλητή expected-time για να ελέγξεις πόσα λεπτά πρέπει να μείνουν τα λαζάνια στον φούρνο. Σύμφωνα με το βιβλίο μαγειρικής, ο αναμενόμενος χρόνος ψησίματος σε λεπτά είναι 40:
expected-time
;;=> 40
Όρισε τη συνάρτηση remaining-time που παίρνει ως όρισμα τα πραγματικά λεπτά που τα λαζάνια έχουν ήδη μείνει στον φούρνο και επιστρέφει πόσα λεπτά πρέπει να μείνουν ακόμα τα λαζάνια στον φούρνο, με βάση τον αναμενόμενο χρόνο ψησίματος σε λεπτά από την προηγούμενη εργασία.
(remaining-time 30)
;;=> 10
Όρισε τη συνάρτηση prep-time που παίρνει ως όρισμα τον αριθμό των στρώσεων που πρόσθεσες στα λαζάνια και επιστρέφει πόσα λεπτά χρειάστηκες για να προετοιμάσεις τα λαζάνια, υποθέτοντας ότι κάθε στρώση σου παίρνει 2 λεπτά για να ετοιμαστεί.
(prep-time 2)
;;=> 4
Όρισε τη συνάρτηση total-time που παίρνει δύο ορίσματα: το πρώτο όρισμα είναι ο αριθμός των στρώσεων που πρόσθεσες στα λαζάνια και το δεύτερο όρισμα είναι ο αριθμός των λεπτών που τα λαζάνια έχουν μείνει στον φούρνο. Η συνάρτηση πρέπει να επιστρέφει πόσα λεπτά συνολικά έχεις δουλέψει για το μαγείρεμα των λαζανιών, που είναι το άθροισμα του χρόνου προετοιμασίας σε λεπτά και του χρόνου σε λεπτά που τα λαζάνια έχουν περάσει στον φούρνο αυτή τη στιγμή.
(total-time 3 20)
;;=> 26
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Clojure με 12 έννοιες105 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.