Tipo astratto Lista

Il tipo astratto Lista rappresenta sequenze di elementi ciascuno dei quali è di un certo tipo prefissato. La sua definizione è la seguente.

TipoAstratto Lista(T)
Domini
  
Lista
: dominio di interesse del tipo
T
: dominio degli elementi che formano le liste
Funzioni
  
listaVuota() $ \mapsto$  Lista
 
pre: nessuna
post: RESULT è la lista vuota
estVuota(Lista l) $ \mapsto$  Boolean
 
pre: nessuna
post: RESULT è true se la lista l è vuota, false altrimenti
cons(T e, Lista l) $ \mapsto$  Lista
 
pre: nessuna
post: RESULT è la lista ottenuta da l inserendo e come primo elemento
car(Lista l) $ \mapsto$  T
 
pre: l non è la lista vuota
post: RESULT è il primo elemento di l
cdr(Lista l) $ \mapsto$  Lista
 
pre: l non è la lista vuota
post: RESULT è la lista ottenuta da l eliminando il primo elemento
FineTipoAstratto

Note

I nomi delle funzioni del tipo astratto provengono dal LISP che è un linguaggio di programmazione interamente basato sulle liste. Tale linguaggio definito nel 1958 da McCarthy, è stato il linguaggio che ha introdotto il paradigma di programmazione funzionale (vedi Unità 1). I nomi car e cdr sono un retaggio storico. Essi traggono origine da un particolare calcolatore dell'epoca, l'IBM 704, dove erano rispettivamente l'abbreviazione per "contents of address register" (i primi 18 bit di parole da 36 bit) e "contents of the decrement register" (i secondi 18 bit).

Esempi di uso della classe Lista

Vediamo ora alcune operazioni che possono essere definite sulle liste realizzate come visto sopra.

Le operazioni che realizziamo sono:

Per realizzare queste operazioni facciamo uso della ricorsione, sfruttando il fatto che le liste sono definite induttivamente: la lista vuota è una lista, aggiungendo un elemento in testa ad una lista (cons) otteniamo una lista, nient'altro è una lista.