> ###### Προγραμματισμός με τοπικές και καθολικές μεταβλητές: Ένα λεπτομερές παράδειγμα

> Στην πράξη, τα προγράμματα της 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].

> Το :αποτέλεσμα παραμένει μια τοπική μεταβλητή, αφού ορίστηκε με το έστω. Μετά την εκτέλεση του μετάφρασε_πολλά, μπορείτε να αποδείξετε πως το :αποτέλεσμα παραμένει μια τοπική μεταβλητή, παρόλο που χρησιμοποιείται το κάνε στην οδηγία ΕκτέλεσεΛίστα.

> `δείξε :αποτέλεσμα`
> `Η μεταβλητή αποτέλεσμα δεν έχει τιμή`