> ###### Εργασίες με λέξεις και λίστες

> Έχοντας γνώση των υπό συνθήκη δομών, των κατηγορημάτων και των διαδικασιών με έξοδο, μπορείτε να δημιουργήσετε ορισμένα χρήσιμα και εξειδικευμένα προγράμματα.

> Είναι εύκολο να ορίσετε το δικό σας κατηγόρημα με τη Logo. Συχνά, αυτά τα "αυτοπροσδιοριζόμενα" κατηγορήματα μπορούν να χρησιμοποιηθούν ως διαδικασίες-εργαλεία για τη σύνθεση εργασιών. Για παράδειγμα, αφού ορίσετε τη διαδικασία αναστροφή (όπως στην ενότητα Αναδρομικές διαδικασίες με έξοδο), μπορείτε να καθορίσετε ένα κατηγόρημα για να διαπιστώσει αν μια λέξη είναι καρκινική (μια λέξη που διαβάζεται το ίδιο και αντίστροφα). Ένας τρόπος γραφής μιας διαδικασίας καρκινική? είναι ο ακόλουθος (πρέπει πρώτα να έχετε ορίσει την αναστροφή). Παρατηρήστε πώς αυτή η διαδικασία χρησιμοποιεί την εντολή ΑνΔιαφορετικά:

> `για καρκινική? :λέξη
> ΑνΔιαφορετικά :λέξη = αναστροφή :λέξη [έξοδος "ΣΩΣΤΟ] [έξοδος "ΛΑΘΟΣ]
> τέλος`

> Η διαδικασία λέει:

> Αν η λέξη στην είσοδο είναι ίδια με αυτή που προκύπτει από την αναστροφή της, τότε επιστρέφει ΣΩΣΤΟ, διαφορετικά επιστρέφει ΛΑΘΟΣ.

> Αφού το = είναι και αυτό κατηγόρημα, η καρκινική? μπορεί να οριστεί με πιο κομψό τρόπο:

> `για καρκινική? :λέξη
> έξοδος :λέξη = αναστροφή :λέξη
> τέλος`

> `δείξε καρκινική? "ΑΝΝΑ`
> `ΣΩΣΤΟ`
> `δείξε καρκινική? "ΝΙΨΟΝΑΝΟΜΗΜΑΤΑΜΗΜΟΝΑΝΟΨΙΝ`
> `ΣΩΣΤΟ`

> Ακολουθεί μια διαδικασία που κάνει έναν έλεγχο για να διαπιστώσει αν η λέξη που δίνεται στην είσοδο ξεκινά με φωνήεν.

> `για φωνήεν? :λέξη
> έξοδος ανήκει? πρώτο :λέξη [α ε η ι ο υ ω ά έ ή ί ό ύ ώ]
> τέλος`

> `δείξε φωνήεν? "άξιος
> ΣΩΣΤΟ`

> Τώρα μπορείτε να ορίσετε μια διαδικασία που να τοποθετεί το στερητικό "α" ή το "αν" πριν τη λέξη, ανάλογα με το πρώτο της γράμμα (για να μη χρειαστεί να γίνει περίπλοκη, θα πρέπει να χρησιμοποιήσετε στην είσοδο λέξεις με κεφαλαία, χωρίς τόνο):

> `για στερητικό-α-αν :λέξη
> αν φωνήεν? :λέξη [έξοδος λέξη "ΑΝ :λέξη]
> έξοδος λέξη "Α :λέξη
> τέλος`

Θα μπορούσατε να χρησιμοποιήσετε την εντολή ΑνΔιαφορετικά αντί για την εντολή αν. Σε αυτή την περίπτωση, η δεύτερη γραμμή οδηγιών της διαδικασίας θα αποτελούσε τα περιεχόμενα της δεύτερης λίστας οδηγιών. `για στερητικό-α-αν :λέξη ΑνΔιαφορετικά φωνήεν? :λέξη [έξοδος λέξη "ΑΝ :λέξη] [έξοδος λέξη "Α :λέξη] τέλος`

> Το στερητικό-α-αν είναι ένας μεταβιβαστής, έτσι, μπορείτε να το χρησιμοποιήσετε στην είσοδο μιας άλλης εντολής ή άλλου μεταβιβαστή.

> `δείξε στερητικό-α-αν "ΑΞΙΟΣ`
> `ΑΝΑΞΙΟΣ`

> `δείξε στερητικό-α-αν "ΤΡΩΤΟΣ
> ` `ΑΤΡΩΤΟΣ```

> Αυτή η ιδέα ελέγχου για φωνήεν μπορεί να εφαρμοστεί σε ένα πρόγραμμα που μεταγλωττίζει προτάσεις σε ..."κορακίστικα"!. Το αποτέλεσμα θα είναι πιο ευανάγνωστο, αν το κείμενο δίνεται με κεφαλαία γράμματα, χωρίς τόνους:

> `για κορακίστικα :λίστα
> αν κενό? :λίστα [έξοδος [ ]]
> έξοδος φράση μια_λέξη πρώτο :λίστα κορακίστικα ΕκτόςΠρώτου :λίστα
> τέλος`

> `για μια_λέξη :λέξη
> αν ανήκει? πρώτο :λέξη [Α Ε Η Ι Ο Υ Ω] [έξοδος λέξη :λέξη "ΑΚΙ]
> έξοδος μια_λέξη λέξη ΕκτόςΠρώτου :λέξη πρώτο :λέξη
> τέλος`

> `δείξε κορακίστικα [ΑΠΟΨΕ ΠΑΜΕ ΝΤΙΣΚΟ]`
> `ΑΠΟΨΕΑΚΙ ΑΜΕΠΑΚΙ ΙΣΚΟΝΤΑΚΙ`
> `δείξε κορακίστικα [ΑΝ ΜΠΟΡΕΙΣ ΦΥΓΕ]`
> `ΑΝΑΚΙ ΟΡΕΙΣΜΠΑΚΙ ΥΓΕΦΑΚΙ`

> Κορακίστικα είναι η υπερδιαδικασία που δέχεται στην είσοδο μια λίστα με λέξεις. Καλεί τη μια_λέξη για να αλλάξει την πρώτη λέξη της λίστας σε κορακίστικα και στη συνέχεια καλεί τον εαυτό της για το υπόλοιπο της λίστας, ώσπου να μετατραπούν μία μία όλες οι λέξεις. Η μια_λέξη εξετάζει και μεταβάλει ένα μέρος της λέξης. Χρησιμοποιεί το κατηγόρημα ανήκει? προκειμένου να ελέγξει αν η λέξη αρχίζει από φωνήεν. Αν ναι, τότε προσθέτει απλώς στο τέλος της την κατάληξη "ακι". Αν όχι, τότε παίρνει το πρώτο σύμφωνο, το βάζει στο τέλος της λέξης και συνεχίζει την ίδια διεργασία ώσπου να συναντήσει φωνήεν στην αρχή της λέξης.
> (Να λάβετε υπόψη ότι αυτό το πρόγραμμα ισχύει μόνο στην περίπτωση που η λέξη περιέχει ένα τουλάχιστον φωνήεν. Για να ισχύει για κάθε περίπτωση, θα πρέπει να προστεθεί μια άλλη διαδικασία που να κάνει έναν έλεγχο για τυχόν εξαιρέσεις.)

Κορακίστικα με πλαίσια κειμένου: Μπορείτε να εκτελέσετε τη διαδικασία κορακίστικα χρησιμοποιώντας ένα πλαίσιο κειμένου ως είσοδο για την αρχική πρόταση και ένα άλλο για το αποτέλεσμα. Για παράδειγμα, δημιουργήστε ένα πλαίσιο κειμένου (Κείμενο1) και πληκτρολογήστε την πρόταση που πρόκειται να μεταγλωττιστεί. Δημιουργήστε ένα άλλο πλαίσιο κειμένου (Κείμενο2) για να εμφανίσετε το αποτέλεσμα. Στη συνέχεια, πληκτρολογήστε στο Κέντρο εντολών: `κείμενο2, τύπωσε κορακίστικα κείμενο1`

> Ακολουθεί ένα άλλο παράδειγμα διαλέκτου, το οποίο αυτή τη φορά αλλάζει την κατάληξη των λέξεων που τελειώνουν με -άτσι σε -άκι. Η ΕκΤ στη διαδικασία κατάληξη είναι η συντομογραφία του ΕκτόςΤελευταίου:

> `για κατάληξη :λέξη
> αν ανήκει? "άτσι :λέξη [έξοδος λέξη ΕκΤ ΕκΤ ΕκΤ :λέξη "κι]
> έξοδος :λέξη
> τέλος`

> `για διάλεκτος :λίστα
> αν κενό? :λίστα [έξοδος [ ]]
> `έξοδος` ΒάλεΠρώτο κατάληξη πρώτο :λίστα διάλεκτος ΕκτόςΠρώτου :λίστα
> τέλος`

Η διαδικασία διάλεκτος μοιάζει πολύ με τη διαδικασία κορακίστικα, αλλά χρησιμοποιεί το ΒάλεΠρώτο αντί για τη φράση.

> `δείξε διάλεκτος [παιδάτσι μου, πάρε ένα κλαδάτσι ελαίας]
> παιδάκι μου, πάρε ένα κλαδάκι ελαίας`

> `δείξε διάλεκτος [δεν πρέπει να φας το κουκούτσι]
> δεν πρέπει να φας το κουκούτσι`

> Η κατάληξη ελέγχει αν μια λέξη τελειώνει σε άτσι. Αν ναι, τότε η κατάληξη -τσι αντικαθίσταται από την κατάληξη -κι, διαφορετικά επιστρέφεται η λέξη χωρίς καμία αλλαγή.

Στη διαδικασία κατάληξη, να προσέξετε ιδιαίτερα τη γραμμή `αν ανήκει? "άτσι :λέξη [έξοδος λέξη ΕκΤ ΕκΤ ΕκΤ :λέξη "κι]` Τι επιστρέφει η οδηγία ΕκΤ ΕκΤ ΕκΤ :λέξη αν η :λέξη είναι παιδάτσι? Εφαρμόστε τον κανόνα ανάγνωσης μιας οδηγίας Logo από αριστερά προς τα δεξιά: Είσοδος στο πρώτο ΕκΤ είναι ΕκΤ ΕκΤ "παιδάτσι Είσοδος στο δεύτερο ΕκΤ είναι ΕκΤ "παιδάτσι Είσοδος στο τρίτο ΕκΤ είναι "παιδάτσι το οποίο επιστρέφει παιδάτσ Είσοδος στο δεύτερο ΕκΤ είναι "παιδάτσ το οποίο επιστρέφει παιδάτ Είσοδος στο πρώτο ΕκΤ είναι "παιδάτ το οποίο επιστρέφει παιδά Τέλος, η οδηγία λέξη "παιδά "κι επιστρέφει παιδάκι.

> Διάλεκτος είναι η υπερδιαδικασία η οποία μετατρέπει (από τις λέξεις μιας λίστας) τις λέξεις της διαλέκτου - αν υπάρχουν - στην τρέχουσα προφορά της γλώσσας.