A redex (σύντομη για μειωμένη έκφραση ) αποτελεί μέρος μιας έκφρασης σε μια γλώσσα προγραμματισμού που μπορεί να απλοποιηθεί ή μειωμένο Σύμφωνα με τους κανόνες αξιολόγησης της γλώσσας . Σκεφτείτε το ως υπο-έκφραση που είναι "ώριμη" για τον υπολογισμό.
Στην ουσία, ένα redex είναι το κομμάτι κώδικα όπου μπορεί να συμβεί το επόμενο υπολογιστικό βήμα.
Πώς σχετίζεται με την αξιολόγηση:
Η αξιολόγηση μιας έκφρασης συνεπάγεται επανειλημμένα τον εντοπισμό και τη μείωση των επαναλήψεων μέχρις ότου η έκφραση είναι σε "κανονική μορφή" - μια κατάσταση όπου δεν είναι δυνατές περαιτέρω μειώσεις. Αυτή η κανονική μορφή αντιπροσωπεύει το τελικό αποτέλεσμα της έκφρασης.
Ακολουθεί μια ανάλυση της σύνδεσης:
1. Προσδιορίστε το redex: Η διαδικασία αξιολόγησης ξεκινά με τη σάρωση της έκφρασης για να βρει μια υπο-έκφραση που ταιριάζει με έναν γνωστό κανόνα μείωσης. Αυτό είναι το redex.
2. Μειώστε το redex: Στη συνέχεια, το Redex "μειώνεται" ή "ξαναγράφηκε" χρησιμοποιώντας τον αντίστοιχο κανόνα μείωσης. Αυτό συνήθως περιλαμβάνει την αντικατάσταση του REDEX με απλούστερη έκφραση.
3. Επαναλάβετε: Η διαδικασία επαναλαμβάνεται. Η νέα έκφραση (μετά τη μείωση) ελέγχεται για ένα άλλο REDEX. Αυτό συνεχίζεται μέχρι να βρεθούν περισσότερα redexes.
4. Κανονική μορφή: Η τελική έκφραση, η οποία δεν περιέχει redexes, θεωρείται αποτέλεσμα της αξιολόγησης. Είναι η "αξία" της αρχικής έκφρασης.
Παραδείγματα για απεικόνιση:
1. Λογισμός Lambda (ένα απλό μοντέλο υπολογισμού):
* Έκφραση: `(λx. x + 1) 5` (αυτό αντιπροσωπεύει μια συνάρτηση που προσθέτει 1 στο επιχείρημά της, που εφαρμόζεται στην τιμή 5)
* redex: `(λx. x + 1) 5` Το ίδιο είναι το redex. Είναι μια εφαρμογή μιας λειτουργίας Lambda σε ένα επιχείρημα.
* Κανόνας μείωσης: Ο κανόνας μείωσης βήτα (αντικατάσταση του επιχειρήματος για την παράμετρο στο σώμα λειτουργίας).
* Μείωση: `(λx. x + 1) 5` μειώνεται στο` 5 + 1 '
* Επόμενο redex: «5 + 1»
* Κανόνας μείωσης: Πρόσθεση.
* Μείωση: «5 + 1» μειώνεται στο «6»
* Κανονική μορφή: «6» (όχι περισσότερο redexes. Αυτό είναι το τελικό αποτέλεσμα.)
2. Αριθμητική έκφραση:
* Έκφραση: `(2 + 3) * 4`
* redex (με αυστηρή σειρά αξιολόγησης, όπως στις περισσότερες γλώσσες): «2 + 3»
* Κανόνας μείωσης: Πρόσθεση.
* Μείωση: `(2 + 3) * 4` μειώνεται στο` 5 * 4 '
* Επόμενο redex: «5 * 4»
* Κανόνας μείωσης: Πολλαπλασιασμός.
* Μείωση: `5 * 4` μειώνεται στο` 20 '
* Κανονική μορφή: «20»
3. Υπό όρους δήλωση (σε υποθετική γλώσσα):
* Έκφραση: `αν είναι αληθινό τότε 10 else 20 '
* redex: `αν είναι αληθινό τότε 10 else 20 '
* Κανόνας μείωσης: Εάν η κατάσταση είναι αληθής, αντικαταστήστε ολόκληρη την έκφραση με τον κλάδο "τότε".
* Μείωση: `αν είναι αληθινό τότε 10 else 20` μειώνεται στο `10 '
* Κανονική μορφή: «10»
Βασικές έννοιες που σχετίζονται με redexes:
* Στρατηγική αξιολόγησης: Η σειρά με την οποία επιλέγονται τα redexes για μείωση επηρεάζει τη διαδικασία αξιολόγησης. Οι κοινές στρατηγικές περιλαμβάνουν:
* Εφαρμοστική σειρά (πρόθυμη αξιολόγηση): Αξιολογήστε τα επιχειρήματα σε μια συνάρτηση * πριν από την εφαρμογή της ίδιας της συνάρτησης. Αυτό συχνά εφαρμόζεται με αυστηρή αξιολόγηση (όπως πολλές επιτακτικές γλώσσες όπως η Java, C ++, Python).
* Κανονική σειρά (τεμπέλης αξιολόγηση): Αξιολογήστε τα επιχειρήματα σε μια συνάρτηση * μόνο όταν * είναι πραγματικά απαραίτητες οι τιμές τους. Αυτό χρησιμοποιείται σε καθαρά λειτουργικές γλώσσες όπως το Haskell.
* call-by-name: Αντικαταστήστε το μη αξιοποιημένο επιχείρημα απευθείας στο σώμα της λειτουργίας.
* call-by-value: Αξιολογήστε το επιχείρημα και μεταβιβάστε την αξία του στη λειτουργία. Παρόμοια με την εφαρμογή.
* call-by-need: Παρόμοια με το όνομα Call-by, αλλά σημειώνει το αποτέλεσμα της πρώτης αξιολόγησης, έτσι ώστε οι επακόλουθες χρήσεις του επιχειρήματος να μην απαιτούν επανεξέταση. Ο Haskell χρησιμοποιεί αυτό.
* Συγκέντρωση: Μια επιθυμητή ιδιότητα ενός συστήματος μείωσης είναι ότι, ανεξάρτητα από τη σειρά με την οποία μειώνεται η redexes, η τελική κανονική μορφή (αν υπάρχει) θα είναι η ίδια. Αυτό είναι γνωστό ως το θεώρημα της εκκλησίας-rosser, και ισχύει για τον λογισμό Lambda και πολλά άλλα επίσημα συστήματα.
Γιατί είναι σημαντικά το redexes;
* Τυπική σημασιολογία: Οι κανόνες redexes και μείωσης παρέχουν έναν ακριβή και επίσημο τρόπο για τον καθορισμό της σημασιολογίας (νόημα) μιας γλώσσας προγραμματισμού.
* Βελτιστοποίηση μεταγλωττιστή: Οι μεταγλωττιστές μπορούν να χρησιμοποιήσουν την ταυτοποίηση και τη μείωση της REDEX για να βελτιστοποιήσουν τον κώδικα. Για παράδειγμα, η σταθερή αναδίπλωση (αξιολόγηση των σταθερών εκφράσεων κατά τη διάρκεια της μεταγλώττισης) είναι μια μορφή μείωσης του REDEX.
* Θεωρητική κατανόηση: Τα redexes είναι θεμελιώδη για την κατανόηση του τρόπου με τον οποίο ο υπολογισμός λειτουργεί σε πολύ βασικό επίπεδο. Πρόκειται για ακρογωνιαίο λίθο πολλών εννοιών θεωρίας γλωσσών προγραμματισμού.
* Εξωσιακή συλλογιστική: Λογιστική σχετικά με τη ορθότητα του προγράμματος χρησιμοποιώντας κανόνες μείωσης για τη μετατροπή του κώδικα σε ισοδύναμες μορφές.
Συνοπτικά, η έννοια του REDEX είναι κεντρική στην κατανόηση του τρόπου με τον οποίο αξιολογούνται οι εκφράσεις στις γλώσσες προγραμματισμού. Παρέχει ένα πλαίσιο για τον καθορισμό, την εφαρμογή και τη συλλογιστική για τον υπολογισμό. Με την επανειλημμένη εύρεση και μείωση των επαναλήψεων, μπορούμε να προσδιορίσουμε το τελικό αποτέλεσμα μιας έκφρασης.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα