hy — συγκεντρωτικός οδηγός — DedSec Project
hy — συγκεντρωτικός οδηγός Hy Τι προσφέρει η γλώσσα Η Hy χρησιμοποιεί εκφράσεις Lisp πάνω στο μοντέλο αντικειμένων της Python. Τα macros επεξεργάζονται σύνταξη πριν από την εκτέλεση, ενώ…
Hy
Τι προσφέρει η γλώσσα
Η Hy χρησιμοποιεί εκφράσεις Lisp πάνω στο μοντέλο αντικειμένων της Python. Τα macros επεξεργάζονται σύνταξη πριν από την εκτέλεση, ενώ υπάρχουν εισαγωγές Python.
Μικρό παράδειγμα προς μελέτη
(setv readings [2 4 6])
(print (sum readings))
Δοκίμασε λίστα με μηδέν και αρνητική τιμή και υπολόγισε την αναμενόμενη αλλαγή. Σύγκρινε τη χρήση quote με την εκτέλεση μιας φόρμας.
Τι να επαληθεύσεις
Κατάγραψε την πραγματική έκδοση εργαλείου, τις απαιτούμενες εξαρτήσεις και την έξοδο σε δοκιμαστικά δεδομένα για τη Hy. Πρόβλεψε το αποτέλεσμα πριν το ελέγξεις και διατήρησε την αρχική και τη διορθωμένη εκδοχή ώστε να φαίνεται η αιτιώδης διαφορά. Μην αποκαλείς ένα απόσπασμα εκτελεσμένο αν δεν έχεις το κατάλληλο περιβάλλον.
Παγίδα ειδική για το θέμα
Τα macros και οι κλήσεις συναρτήσεων εκτελούνται σε διαφορετικά στάδια· η σύνταξη Hy δεν είναι αυτούσιος κώδικας Python.
Αυτόνομη άσκηση
Μετέτρεψε το βασικό παράδειγμα σε δεύτερη παραλλαγή που δέχεται μία διαφορετική είσοδο. Σημείωσε μία δοκιμή ορίου και μία περίπτωση στην οποία η συμπεριφορά εξαρτάται από το περιβάλλον. Αν η γλώσσα δεν υποστηρίζεται στο τρέχον σύστημά σου, αξιολόγησε τη σημασιολογία του αποσπάσματος χωρίς να παρουσιάζεις υποθετική έξοδο ως πραγματικό test.
Εργαστήριο εξάσκησης: Hy
Ξεκίνα από πραγματική εκτέλεση
Το 00_starter.hy εκτυπώνει Hello, Hy!. Σε προσωρινό περιβάλλον με εγκατεστημένη Hy εκτέλεσε αυτό το αρχείο και κατέγραψε εκδόσεις Hy και Python. Η Hy μεταφράζει εκφράσεις τύπου Lisp σε συμπεριφορά συμβατή με Python· η διαφορετική σύνταξη δεν καταργεί τις εξαιρέσεις του υποκείμενου runtime.
Μετασχημάτισε μία μικρή συλλογή
Σε αρχείο squares.hy γράψε:
(setv values [1 2 3])
(setv squares (list (map (fn [n] (* n n)) values)))
(print squares)
(print (sum squares))
Αναμένονται τετράγωνα 1, 4, 9 και άθροισμα 14. Διάβασε την έκφραση από μέσα προς τα έξω: η fn δημιουργεί συνάρτηση μίας παραμέτρου, η map την εφαρμόζει σε κάθε τιμή, η list υλοποιεί τον επαναλήπτη και η sum αθροίζει. Μην μπερδεύεις έναν iterator με έτοιμη λίστα. Η μορφή εκτύπωσης πρέπει να επιβεβαιώνεται στην πραγματική έκδοση του διερμηνευτή.
Παρατήρησε μία εξαίρεση
Σε ξεχωριστή δοκιμή αξιολόγησε (print (/ 1 0)). Η διαίρεση με μηδέν πρέπει να αποτύχει αντί να επιστρέψει κανονικό αριθμό. Κράτησε όλο το traceback και εντόπισε ως πηγή την αριθμητική έκφραση, όχι την τελική print. Μη βάζεις γενικό χειριστή εξαιρέσεων πριν κατανοήσεις την αιτία, γιατί θα κρύψει πραγματικές ατέλειες των εισόδων.
Σύγκρινε σημασία, όχι εμφάνιση
Σύγκρινε (list (map (fn [n] (+ n 1)) [1 2 3])) με αντίστοιχη list comprehension γραμμένη σε κανονική Python. Το αποτέλεσμα μπορεί να είναι ίδιο παρότι η σύνταξη διαφέρει. Δοκίμασε κενή λίστα και ύστερα συλλογή που περιέχει συμβολοσειρές. Διαχώρισε την έγκυρη κενή έξοδο από το σφάλμα τύπου στη πρόσθεση. Η Hy δεν μετατρέπει αυθαίρετα το κείμενο σε αριθμό.
Τελική άσκηση
Σχεδίασε συνάρτηση που υπολογίζει άθροισμα τετραγώνων μη αρνητικών τιμών και ορίζει ρητά τι θα γίνει σε αρνητική είσοδο. Έλεγξε [], [0], [-1] και [2 3]. Το φιλτράρισμα, η απόρριψη και η κανονικοποίηση είναι διαφορετικές πολιτικές. Παρατήρησε τις πραγματικές εξόδους σε απομονωμένο περιβάλλον και κατέγραψε τις διαγνώσεις. Τεκμηρίωση: https://hylang.org/
Hy — Διαδρομή ουσιαστικής εξάσκησης
Θεμελιώδης άσκηση
Γράψε Hy script που εισάγει Python standard-library function και την καλεί με Lisp-style expressions.
Άσκηση επίλυσης προβλήματος
Υλοποίησε list mapping και predicate σε Hy και σύγκρινε με Python. Ξεχώρισε quoted data από evaluated forms.
Ανεξάρτητο έργο
Φτιάξε read-only file summarizer σε προσωρινό UTF-8 fixture. Κατάγραψε Hy release γιατί macros και syntax αλλάζουν.