Υλοποίησε βασικές πράξεις σε λίστες.
Στις συναρτησιακές γλώσσες, οι πράξεις σε λίστες όπως οι length, map και reduce είναι πολύ συνηθισμένες. Υλοποίησε μια σειρά από βασικές πράξεις σε λίστες, χωρίς να χρησιμοποιήσεις υπάρχουσες συναρτήσεις.
Ο ακριβής αριθμός και τα ονόματα των πράξεων που θα υλοποιήσεις εξαρτώνται από τη διαδρομή, ώστε να αποφευχθούν συγκρούσεις με υπάρχοντα ονόματα, αλλά οι γενικές πράξεις που θα υλοποιήσεις περιλαμβάνουν:
append (με δεδομένες δύο λίστες, πρόσθεσε όλα τα στοιχεία της δεύτερης λίστας στο τέλος της πρώτης);concatenate (με δεδομένη μια σειρά από λίστες, συνένωσε όλα τα στοιχεία όλων των λιστών σε μία επίπεδη λίστα);filter (με δεδομένο ένα κατηγόρημα και μια λίστα, επίστρεψε τη λίστα με όλα τα στοιχεία για τα οποία το predicate(item) είναι αληθές);length (με δεδομένη μια λίστα, επίστρεψε τον συνολικό αριθμό των στοιχείων της);map (με δεδομένη μια συνάρτηση και μια λίστα, επίστρεψε τη λίστα με τα αποτελέσματα της εφαρμογής της function(item) σε όλα τα στοιχεία);foldl (με δεδομένη μια συνάρτηση, μια λίστα και έναν αρχικό συσσωρευτή, δίπλωσε (ανάγωγε) κάθε στοιχείο στον συσσωρευτή από τα αριστερά);foldr (με δεδομένη μια συνάρτηση, μια λίστα και έναν αρχικό συσσωρευτή, δίπλωσε (ανάγωγε) κάθε στοιχείο στον συσσωρευτή από τα δεξιά);reverse (με δεδομένη μια λίστα, επίστρεψε μια λίστα με όλα τα αρχικά στοιχεία, αλλά σε αντίστροφη σειρά).Σημείωσε ότι η σειρά με την οποία περνιούνται τα ορίσματα στις συναρτήσεις δίπλωσης (foldl, foldr) έχει σημασία.
Οι παραπάνω οδηγίες συγχρονίζονται με ένα κοινόχρηστο αποθετήριο, ώστε να διασφαλίζεται η συνέπεια σε όλες τις διαδρομές γλωσσών. Αυτό το παράρτημα παρέχει πρόσθετες διευκρινίσεις ή τροποποιεί τις οδηγίες όπως χρειάζεται, ώστε να ευθυγραμμίζονται καλύτερα με τους στόχους της διαδρομής Clojure.
Για αυτή την άσκηση στη διαδρομή Clojure, υπέθεσε ότι και η είσοδος και η έξοδος είναι διανύσματα, όπως υποδεικνύουν τα tests. Ως στόχο επέκτασης, σκέψου πώς να υλοποιήσεις μια προσέγγιση που δεν χρησιμοποιεί λίστες για ενδιάμεσα βήματα.
Είναι σημαντικό να μην επαναχρησιμοποιήσεις υπάρχουσες ενσωματωμένες συναρτήσεις της Clojure με παρόμοια λειτουργικότητα, γιατί κάτι τέτοιο θα μείωνε την μαθησιακή αξία που έχει σχεδιαστεί να έχει αυτή η άσκηση.
Βασικές συναρτήσεις από τον χώρο ονομάτων clojure.core που πρέπει να αποφύγεις είναι οι into, concat, cat, lazy-cat, mapcat, flatten, filter, filterv, remove, count, map, mapv, reduce, transduce, reverse και rseq.
Ο προαιρετικός στόχος απευθύνεται σε όσους θέλουν μια επιπλέον πρόκληση και έχει σχεδιαστεί με την προϋπόθεση ότι έχεις ήδη ολοκληρώσει τον βασικό στόχο.
Δοκίμασε να περάσεις τα tests σχεδιάζοντας μια προσέγγιση που υποθέτει ότι:
Αν αποφασίσεις να το δημοσιεύσεις, φρόντισε να συμπεριλάβεις ένα σχόλιο που να δηλώνει ότι αφορά τον προαιρετικό στόχο της χρήσης λιστών. Μην ξεχάσεις να ενημερώσεις τα docstrings!
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Clojure με 12 έννοιες105 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.
Απόλαυσε μια πρακτική εισαγωγή στην αναδρομή, εξερεύνησε τις προστακτικές και τις συναρτησιακές εναλλακτικές στις Λειτουργίες λίστας και ρίξε μια βαθύτερη ματιά στην αναδρομή ουράς και στις συναρτήσεις συσσωρευτή.