Προγραμματισμός με τοπικές και καθολικές μεταβλητές: Ένα λεπτομερές παράδειγμα
Στην πράξη, τα προγράμματα της Logo περιέχουν συνήθως ένα συνδυασμό τοπικών και καθολικών μεταβλητών. Το παράδειγμα που ακολουθεί θα σας βοηθήσει να κατανοήσετε το σκοπό των μεταβλητών αυτών.
Το πρόγραμμα αυτό σας δίνει τη δυνατότητα να μεταφράσετε μια ομάδα λέξεων σε άλλη γλώσσα:
για ΝαΘυμάσαι :λέξη :μετάφραση
κάνε :λέξη :μετάφραση
τέλος
για ΝαΘυμάσαι_Πολλά :λίστα
αν κενό? :λίστα [στοπ]
ΝαΘυμάσαι στοιχείο 1 :λίστα
στοιχείο 2 :λίστα
ΝαΘυμάσαι_Πολλά ΕκΠ ΕκΠ :λίστα
τέλος
για μετάφρασε_πολλά :λίστα
έστω [αποτέλεσμα [ ]]
ΕκτέλεσεΛίστα [λξ :λίστα][κάνε "αποτέλεσμα φράση :αποτέλεσμα μετάφραση :λέξη]
έξοδος :αποτέλεσμα
τέλος
για μετάφραση :λέξη
έξοδος αντικείμενο :λέξη
τέλοςΗ διαδικασία ΝαΘυμάσαι κάνει χρήση της εντολής κάνε. Εδώ χρειάζεται μια καθολική μεταβλητή, επειδή η μετάφραση κάθε λέξης αποτελεί ένα τμήμα δεδομένων τα οποία πρέπει να θυμηθεί το πρόγραμμα, προκειμένου να τα αναζητήσει.
ΝαΘυμάσαι "hello "bonjour
δείξε :hello
bonjour
δείξεμετάφραση"hello
bonjour
Η διαδικασία ΝαΘυμάσαι_Πολλά έχει ως είσοδο μια λίστα. Είναι αναδρομική, επομένως κάθε ΝαΘυμάσαι_Πολλά έχει μια δική της ξεχωριστή μεταβλητή να μεταβιβάσει στη διαδικασία ΝαΘυμάσαι. Η :λίστα είναι μια προσωρινή τοπική μεταβλητή που αλλάζει σε κάθε αναδρομική κλήση.
ΝαΘυμάσαι_Πολλά [the le sky ciel is est blue bleu]Παρακολουθήστε με τη λειτουργία Παρακολούθηση τη διαδικασία ΝαΘυμάσαι_Πολλά για να δείτε πώς αλλάζουν οι είσοδοι και πώς γίνεται η επεξεργασία κάθε ζεύγους λέξεων. Η πρωτογενής διαδικασία ονόματα επιστρέφει όλες τις καθολικές μεταβλητές που έχουν δημιουργηθεί.
δείξε ονόματα
κάνε "the "le
κάνε "sky "ciel
κάνε "is "est
κάνε "blue "bleu
Η μετάφρασε_πολλά περιλαμβάνει μια είσοδο, μια οδηγία με έστω και μια οδηγία ΕκτέλεσεΛίστα που έχει ως είσοδο μια οδηγία με κάνε. Δοκιμάστε το εξής:
δείξε μετάφρασε_πολλά [the sky is blue]
le ciel est bleu
Ας εξετάσουμε κάθε γραμμή αυτής της διαδικασίας.
Η γραμμή
έστω [αποτέλεσμα [ ]]δημιουργεί μια τοπική μεταβλητή που ονομάζεται αποτέλεσμα και έχει ως είσοδο μια κενή λίστα.
ΕκτέλεσεΛίστα [λέξη :λίστα] [κάνε "αποτέλεσμα φράση :αποτέλεσμα μετάφραση :λέξη]Υπάρχουν δύο πρωτογενείς διαδικασίες, η ΕκτέλεσεΛίστα και η ΕκτέλεσεΦορές, που χρησιμοποιούνται για κυκλική σάρωση οδηγιών. Η δομή τους σας δίνει τη δυνατότητα να ορίσετε τοπικές μεταβλητές.
Η ΕκτέλεσεΛίστα εκτελεί ένα σύνολο οδηγιών για κάθε αντικείμενο της λίστας. Η πρώτη είσοδος ορίζει μια περιοχή τιμών για ένα προσωρινό όνομα μεταβλητής. Στην περίπτωση αυτή, η λέξη είναι μια τοπική μεταβλητή η οποία έχει ως τιμή τη λίστα που έχει δοθεί ως είσοδος, δηλαδή [the sky is blue].
Η δεύτερη είσοδος της ΕκτέλεσεΛίστα εκτελεί μια οδηγία, στην περίπτωση αυτή την έκφραση κάνε, κάνε "αποτέλεσμα φράση :αποτέλεσμα μετάφραση :λξ
Η ΕκτέλεσεΛίστα εκτελεί την οδηγία κάνε με κάθε αντικείμενο της λίστας [the sky is blue]. Η τιμή του αποτέλεσμα συνεχίζει να δέχεται στο τέλος της μια νέα μεταφρασμένη λέξη:
φράση :αποτέλεσμα μετάφραση :λξΗ μετάφραση είναι ένας μεταβιβαστής με είσοδο. Εκτελεί την οδηγία έξοδος αντικείμενο :λέξη. Θυμηθείτε πως το αντικείμενο επιστρέφει την τιμή της εισόδου του.
δείξε μετάφραση "sky
ciel
Αν η τιμή του :αποτέλεσμα είναι [le] σε αυτό το σημείο της οδηγίας ΕκτέλεσεΛίστα, τότε η οδηγία κάνε θα άλλαζε την τιμή της σε [le ciel].
Η γραμμή
έξοδος :αποτέλεσμαεξάγει την τελική τιμή του :αποτέλεσμα, δηλαδή [le ciel est blue].Το :αποτέλεσμα παραμένει μια τοπική μεταβλητή, αφού ορίστηκε με το έστω. Μετά την εκτέλεση του μετάφρασε_πολλά, μπορείτε να αποδείξετε πως το :αποτέλεσμα παραμένει μια τοπική μεταβλητή, παρόλο που χρησιμοποιείται το κάνε στην οδηγία ΕκτέλεσεΛίστα.
δείξε :αποτέλεσμα
Η μεταβλητή αποτέλεσμα δεν έχει τιμή