> ###### Προγραμματισμός: Λίστες

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

> Ο μεταβιβαστής μέτρησε μπορεί να χρησιμοποιηθεί για τη μέτρηση του αριθμού των στοιχείων μιας λέξης ή μιας λίστας:

> `δείξε μέτρησε [1 [1 2][17 [17 2]]]`
> `3`

> Η λίστα [1 [1 2] [17 [17 2]]] περιέχει 3 στοιχεία, όχι έξι. Το δεύτερο και το τρίτο στοιχείο είναι λίστες:

> 1
> [1 2]
> [17 [17 2]]

> Οι μεταβιβαστές της Logo που εξάγουν στοιχεία από λέξεις, κάνουν το ίδιο και με τις λίστες:

> ### Πρωτογενής διαδικασία | ### ορισμός | ### παράδειγμα | ### έξοδος
> πρώτο | Δίνει ως έξοδο το πρώτο στοιχείο μιας λίστας. | `πρώτο [1 [1 2][17 [17 2]]]` | `1`
> τελευταίο | Δίνει ως έξοδο το τελευταίο στοιχείο μιας λίστας. | `τελευταίο [1 [1 2][17 [17 2]]]` | `[17 [17 2]]`
> ΕκτόςΠρώτου | Δίνει ως έξοδο όλα εκτός από το πρώτο στοιχείο μιας λίστας. | `ΕκτόςΠρώτου [1 [1 2][17 [17 2]]]` | `[[1 2] [17 [17 2]]]`
> ΕκτόςΤελευταίου | Δίνει ως έξοδο όλα εκτός από το τελευταίο στοιχείο μιας λίστας. | `ΕκτόςΤελευταίου [1 [1 2][17 [17 2]]]` | `[1 [1 2]]`
> αντικείμενο | Δίνει ως έξοδο το καθορισμένο στοιχείο μιας λίστας. | `αντικείμενο 3 [1 [1 2][17 [17 2]]]` | `[17 [17 2]]`

> Μια κενή λίστα δεν περιέχει λέξεις και τυπώνει μια κενή γραμμή:

> `δείξε [ ]`

> Θα πρέπει να σημειώσουμε εδώ πως οι κενές λίστες και οι κενές λέξεις δεν ταυτίζονται στη Logo, παρόλο που η έξοδος είναι η ίδια. Κάτι τέτοιο είναι περισσότερο εμφανές όταν μια λίστα που περιέχει μια λέξη τυπώνεται όπως μια λέξη και παρόλα αυτά η Logo τις θεωρεί διαφορετικά είδη δεδομένων.

> `δείξε "ωραία`
> `ωραία`
> `δείξε [ωραία]`
> `ωραία`
> `δείξε "ωραία = [ωραία]`
> `ΛΑΘΟΣ`

> Η διαδικασία τριγωνική μπορεί να τροποποιηθεί έτσι ώστε η είσοδός της να είναι μια λέξη ή μια λίστα:

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

> ``τριγωνική` [τα καγκουρό πηδούν χαριτωμένα]`
> `τα καγκουρό πηδούν χαριτωμένα
> καγκουρό πηδούν χαριτωμένα
> πηδούν χαριτωμένα
> χαριτωμένα`

> Παρατηρήστε πως αυτή η διαδικασία χρησιμοποιεί τον μεταβιβαστή κενό?. Ο μεταβιβαστής κενό? κάνει έναν έλεγχο για να διαπιστώσει αν το δεδομένο στην είσοδό του είναι κενή λέξη ή κενή λίστα (δείτε το συνοπτικό πίνακα των ενσωματωμένων κατηγορημάτων).

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

> `δείξε φράση [Είμαι] [ένας χαρούμενος οδοιπόρος]`
> `Είμαι ένας χαρούμενος οδοιπόρος`

> Ένας άλλος μεταβιβαστής της Logo που συνδυάζει όλα τα στοιχεία των εισόδων του για να δημιουργήσει μια λίστα είναι η λίστα. Η διαφορά ανάμεσα στη φράση και τη λίστα είναι πως η λίστα διατηρεί τη δομή των εισαγομένων στοιχείων. Για παράδειγμα:

> `δείξε λίστα [Είμαι] [ένας χαρούμενος οδοιπόρος]`
> `[Είμαι] [ένας χαρούμενος οδοιπόρος]`

> Στα περισσότερα αλληλεπιδραστικά προγράμματα, η φράση χρησιμοποιείται για να εμφανίζει λέξεις, όταν δεν θέλετε να βλέπετε τις αγκύλες στις μεμονωμένες λίστες.

> Δύο άλλες πρωτογενείς διαδικασίες που συγκεντρώνουν στοιχεία σε λίστες είναι η ΒάλεΠρώτο και η ΒάλεΤελευταίο.

> Η ΒάλεΠρώτο δίνει ως έξοδο τη λίστα που δημιουργείται με την προσθήκη του δεδομένου από την πρώτη είσοδο στην αρχή του δεδομένου από τη δεύτερη είσοδο. Στη δεύτερη είσοδο πρέπει να εισάγεται λίστα.

> `δείξε ΒάλεΠρώτο "internet [[java html] [www] [gif jpeg]]`
> `internet [java html] [www] [gif jpeg]`

> Η ΒάλεΤελευταίο δίνει ως έξοδο τη λίστα που δημιουργείται με την προσθήκη του δεδομένου από την πρώτη είσοδο στο τέλος του δεδομένου από τη δεύτερη είσοδο. Στη δεύτερη είσοδο πρέπει να εισάγεται και πάλι λίστα.

> `δείξε ΒάλεΤελευταίο "internet [[java html] [www] [gif jpeg]]`
> `[java html] [www] [gif jpeg] internet`

> Οι τρεις πρωτογενείς διαδικασίες, ΒάλεΠρώτο, ΒάλεΤελευταίο και λίστα αποδεικνύονται πολύ σημαντικές όταν χρησιμοποιείτε λίστες ως δομές δεδομένων τις οποίες μπορείτε να χειριστείτε.

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

> ### Μεταβιβαστής | ### είσοδος 1 | ### είσοδος 2 | ### έξοδος
> ΒάλεΠρώτο | `"αγελάδα` | `"άλογο` | `ΛΑΘΟΣ`
> λίστα | `"αγελάδα` | `"άλογο` | `[αγελάδα άλογο]`
> ΒάλεΤελευταίο | `"αγελάδα` | `"άλογο` | `ΛΑΘΟΣ`
> φράση | `"αγελάδα` | `"άλογο` | `[αγελάδα άλογο]`
> ΒάλεΠρώτο | `"Η` | `[Logo είναι σπουδαία]` | `[Η Logo είναι σπουδαία]`
> λίστα | `"Η` | `[Logo είναι σπουδαία]` | `[Η Logo [είναι σπουδαία]]`
> ΒάλεΤελευταίο | `"Η` | `[Logo είναι σπουδαία]` | `[είναι σπουδαία Logo Η]`
> φράση | `"Η` | `[Logo είναι σπουδαία]` | `[Η Logo είναι σπουδαία]`
> ΒάλεΠρώτο | `[Είμαι]` | `[ένας χαρούμενος οδοιπόρος]` | `[[Είμαι] ένας χαρούμενος οδοιπόρος]`
> λίστα | `[Είμαι]` | `[ένας χαρούμενος οδοιπόρος]` | `[[Είμαι] [ένας χαρούμενος οδοιπόρος]]`
> ΒάλεΤελευταίο | `[Είμαι]` | `[ένας χαρούμενος οδοιπόρος]` | `[ένας χαρούμενος οδοιπόρος [Είμαι]]`
> φράση | `[Είμαι]` | `[ένας χαρούμενος οδοιπόρος]` | `[Είμαι ένας χαρούμενος οδοιπόρος]`
> ΒάλεΠρώτο | `"internet` | `[ ]` | `[internet]`
> λίστα | `"internet` | `[ ]` | `[internet [ ] ]`
> ΒάλεΤελευταίο | `"internet` | `[ ]` | `[internet]`
> φράση | `"internet` | `[ ]` | `[internet]`