Υλοποίησε βασικές πράξεις σε λίστες.
Στις συναρτησιακές γλώσσες, οι πράξεις σε λίστες όπως οι length, map και reduce είναι πολύ συνηθισμένες. Υλοποίησε μια σειρά από βασικές πράξεις σε λίστες, χωρίς να χρησιμοποιήσεις υπάρχουσες συναρτήσεις.
Ο ακριβής αριθμός και τα ονόματα των πράξεων που θα υλοποιήσεις εξαρτώνται από τη διαδρομή, ώστε να αποφευχθούν συγκρούσεις με υπάρχοντα ονόματα, αλλά οι γενικές πράξεις που θα υλοποιήσεις περιλαμβάνουν:
append (με δεδομένες δύο λίστες, πρόσθεσε όλα τα στοιχεία της δεύτερης λίστας στο τέλος της πρώτης);concatenate (με δεδομένη μια σειρά από λίστες, συνένωσε όλα τα στοιχεία όλων των λιστών σε μία επίπεδη λίστα);filter (με δεδομένο ένα κατηγόρημα και μια λίστα, επίστρεψε τη λίστα με όλα τα στοιχεία για τα οποία το predicate(item) είναι αληθές);length (με δεδομένη μια λίστα, επίστρεψε τον συνολικό αριθμό των στοιχείων της);map (με δεδομένη μια συνάρτηση και μια λίστα, επίστρεψε τη λίστα με τα αποτελέσματα της εφαρμογής της function(item) σε όλα τα στοιχεία);foldl (με δεδομένη μια συνάρτηση, μια λίστα και έναν αρχικό συσσωρευτή, δίπλωσε (ανάγωγε) κάθε στοιχείο στον συσσωρευτή από τα αριστερά);foldr (με δεδομένη μια συνάρτηση, μια λίστα και έναν αρχικό συσσωρευτή, δίπλωσε (ανάγωγε) κάθε στοιχείο στον συσσωρευτή από τα δεξιά);reverse (με δεδομένη μια λίστα, επίστρεψε μια λίστα με όλα τα αρχικά στοιχεία, αλλά σε αντίστροφη σειρά).Σημείωσε ότι η σειρά με την οποία περνιούνται τα ορίσματα στις συναρτήσεις δίπλωσης (foldl, foldr) έχει σημασία.
Στη Java θεωρείται βέλτιστη πρακτική να χρησιμοποιείς μεθόδους στιγμιοτύπου αντί για μεθόδους κλάσης. Ωστόσο, υπάρχουν περιπτώσεις στις οποίες είναι απολύτως σωστό μια συνάρτηση να είναι static. Επειδή οι κλάσεις στη Java είναι κλειστές για τροποποίηση (δηλαδή δεν μπορείς να προσθέσεις μέλη σε μια κλάση έξω από τον ορισμό της, όπως μπορείς σε άλλες γλώσσες όπως η Ruby ή η JavaScript), δεν μπορείς να προσθέσεις νέα συμπεριφορά στην κλάση απευθείας. Τι κάνεις αν θέλεις παρ' όλα αυτά να ορίσεις συμπεριφορά για έναν δεδομένο τύπο; Η ιδιωματική λύση σε αυτή την περίπτωση είναι να γράψεις μια βοηθητική μέθοδο.
Συλλογές τέτοιων μεθόδων αναφέρονται συχνά ως "βοηθητικές κλάσεις". Παραδείγματα τέτοιων κλάσεων μέσα στο JRE είναι οι Arrays και Collections.
Σε αυτή την άσκηση θέλουμε η List να έχει μεθόδους map(), reduce(), filter() κ.λπ. Δεν έχει, γι' αυτό χρησιμοποιούμε στατικές μεθόδους.
Οι μέθοδοι foldLeft και foldRight είναι συναρτήσεις "fold", μια έννοια πολύ γνωστή στον χώρο του συναρτησιακού προγραμματισμού, αλλά λιγότερο σε αυτόν του αντικειμενοστρεφούς. Δες τη σελίδα της Wikipedia για το folding για γενικό υπόβαθρο και υποδείξεις για την υπογραφή και την υλοποίηση.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.
Απόλαυσε μια πρακτική εισαγωγή στην αναδρομή, εξερεύνησε τις προστακτικές και τις συναρτησιακές εναλλακτικές στις Λειτουργίες λίστας και ρίξε μια βαθύτερη ματιά στην αναδρομή ουράς και στις συναρτήσεις συσσωρευτή.