Όλες οι συναρτήσεις στην ενότητα Enum είναι πρόθυμες. Όταν εκτελείς πολλαπλές πράξεις σε απαριθμήσιμα με την ενότητα Enum, κάθε πράξη θα παράγει ένα ενδιάμεσο αποτέλεσμα.
Η ενότητα Stream είναι μια οκνηρή εναλλακτική στην πρόθυμη ενότητα Enum. Προσφέρει πολλές από τις ίδιες συναρτήσεις με την ενότητα Enum, αλλά αντί να παράγει ενδιάμεσα αποτελέσματα, χτίζει μια σειρά υπολογισμών που εκτελούνται μόνο όταν η ροή περαστεί σε μια συνάρτηση από την ενότητα Enum.
Οι ροές υλοποιούν το πρωτόκολλο Enumerable και είναι συνθέσιμες: μπορείς να τις συνδέσεις μεταξύ τους για να δημιουργήσεις πιο σύνθετη λειτουργικότητα.
Είσαι μεγάλος θαυμαστής του καναλιού Numberphile στο Youtube και μόλις είδες ένα ωραίο βίντεο για την Ακολουθία Αριθμών Lucas. Θέλεις να δημιουργήσεις αυτή την ακολουθία χρησιμοποιώντας Elixir.
Καθώς σχεδιάζεις τη συνάρτησή σου, θέλεις να αξιοποιήσεις την οκνηρή αξιολόγηση, ώστε να μπορείς να παράγεις όσους αριθμούς θέλεις, αλλά μόνο αν τους χρειάζεσαι. Έτσι, αποφασίζεις να χρησιμοποιήσεις ένα stream.
Πρόσθεσε μια ρήτρα guard για να πετάει ένα σφάλμα αν χρησιμοποιηθεί κάτι που δεν είναι ακέραιος ή ένας ακέραιος μικρότερος του 1 για να παραχθεί η ακολουθία. Αν το κάνεις αυτό ως πρώτο βήμα, θα αποτρέψεις bugs άπειρης αναδρομής στα επόμενα βήματα.
LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1
Ξέρεις ότι η ακολουθία έχει δύο αρχικούς αριθμούς που δεν ακολουθούν τον ίδιο κανόνα. Γράψε δύο ρήτρες βασικών περιπτώσεων για να επιστρέφουν αυτούς τους αριθμούς:
LucasNumbers.generate(1)
# => [2]
LucasNumbers.generate(2)
# => [2, 1]
Για οποιαδήποτε ακολουθία μεγαλύτερη του 2, ξέρεις ότι πρέπει να προσθέσεις τους δύο προηγούμενους αριθμούς για να πάρεις τον επόμενο, και ούτω καθεξής. Γράψε τη γενικευμένη περίπτωση.
LucasNumbers.generate(3)
# => [2, 1, 3]
LucasNumbers.generate(4)
# => [2, 1, 3, 4]
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elixir με 58 έννοιες168 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.