# LOGO/Parole e liste

· StoriaLOGO/Storia · IntroduzioneLOGO/Introduzione · MovimentiLOGO/Movimenti · ProcedureLOGO/Procedure · VariabiliLOGO/Variabili · RicorsivitàLOGO/Ricorsività · Parole e listeLOGO/Parole e liste · Input ed OutputLOGO/Input ed Output · CoordinateLOGO/Coordinate · AssonometriaLOGO/Assonometria · ApprofondimentiLOGO/Approfondimenti

## Sequenze

In Logo ci sono due tipi di dati: parole e liste. Entrambe sono delle sequenze di elementi.
Le funzioni base che si applicano a tutte le sequenze sono:
* first: restituisce il primo elemento,
* bf: restituisce la sequenza privata del primo elemento,
* last: restituisce l'ultimo elemento,
* bl: restituisce la sequenza privata dell'ultimo elemento.

## Parole

Una parola è una sequenza di caratteri. Per definire una parola si scrivono i caratteri preceduti dal doppio apice. Il seguente comando:
associa alla parola variabile la parola contenuto.
E i numeri? In Logo i numeri sono semplicemente un sottoinsieme delle parole, ma a differenza di queste, per non appesantire la sintassi, si scrivono senza le virgolette iniziali:
Una parola può essere definita in modo ricorsivo:
Una procedura che riceve una parola e stampa i suoi caratteri uno sotto l'altro:
Una procedura che riceve una parola e stampa le parole triangolari derivate:

## Liste

Una lista è una sequenza di parole o di liste. Per definire una lista si usano le parentesi quadre:
Per semplicità le parole all'interno di una lista non devono essere precedute dai doppi apici.
Ma una lista può essere molto più complessa dato che può contenere liste che possono contenere liste che possono...
Le funzioni first e bf funzionano anche con le liste quindi le due procedure precedenti possono essere applicate anche alle liste:
Visto che le due funzioni precedenti si comportano altrettanto bene sia che ricevano come argomento una parola sia che ricevano una lista, è più sensato cambiare il nome del parametro da parola in sequenza:
Questo cambiamento ha effetto solo per il programmatore, per quanto riguarda l'interprete Logo, il parametro potrebbe avere qualunque nome, anche: jhgsdc.

## Primitive

legenda
* con carattere si intende una parola di lunghezza 1;
* con oggetto, oggetto1, ... si intende indifferentemente una parola o una lista;
* con parola, parola1, ... si intende una parola, che può essere anche un numero;
* con lista, lista1, ... si intende una lista.
* con numero si intende un numero naturale.
Di seguito sono elencate altre primitive che si applicano a parole e liste.
* ascii carattere: restituisce il codice ascii di carattere
* butfirst oggetto o bf oggetto: restituisce la sequenza oggetto privata del primo elemento.
* butlast oggetto o bl oggetto: restituisce la sequenza oggetto privata dell'ultimo elemento.
* char numero: restituisce il carattere che ha codice ascii numero
* count oggetto: restituisce il numero di elementi contenuti in oggetto
* emptyp oggetto: restituisce true se oggetto è vuoto
* equalp oggetto1 oggetto2: restituisce true se oggetto1 e oggetto2 sono uguali
* first oggetto: restituisce il primo elemento di oggetto
* fput oggetto lista: restituisce una lista con tutti gli elementi di lista e, aggiunto come primo elemento oggetto
* item numero oggetto: restituisce l'elemento di posizione numero in oggetto
* last oggetto: restituisce l'ultimo elemento di oggetto
* list oggetto1 oggetto2: restituisce una lista formata dai due elementi oggetto1 e oggetto2
* (list oggetto1 oggetto2 ...): restituisce una lista formata da tutti gli elementi oggetto1, oggetto2, ...
* listp oggetto: restituisce true se oggetto è una lista
* lput oggetto lista: restituisce una lista con tutti gli elementi di lista e, aggiunto come ultimo elemento oggetto
* memberp oggetto1 oggetto2: restituisce true se oggetto1 è un elemento di oggetto2
* numberp oggetto: restituisce true se oggetto è un numero
* sentence oggetto1 oggetto2: se oggetto1 e oggetto2 sono parole restituisce una lista che le contiene, se sono liste restituisce una lista con tutti gli elementi della prima seguiti da tutti quelli della seconda
* (sentence oggetto1 oggetto2 ...): come la funzione precedente ma con un numero variabile di argomenti
* word parola1 parola2: restituisce una parola ottenuta concatenando i due argomenti
* (word parola1 parola2 ...): come la funzione precedente ma con un numero variabile di argomenti
* wordp oggetto: restituisce true se oggetto è una parola
* oggetto1 = oggetto2: restituisce true se oggetto1 è uguale a oggetto2