;gestione liste proprieta'
;-------------------------------------
;lista1


(prog1
 (put'rossi'qualifica'(studente))
 (put'rossi'indirizzo'(via padova 4))
 (put'rossi'regione'(veneto))
 (put'verdi'qualifica'(dottore))
 (put'verdi'indirizzo'(via torino 4))
 (put'verdi'regione'(campania))
 (put'bianchi'qualifica'(studente))
 (put'bianchi'indirizzo'(via verona 4))
 (put'bianchi'regione'(lazio))
 (terpri)
 ;-----------------------------------
 (print "rossi")
 (print(get 'rossi'qualifica))
 (print(get 'rossi'indirizzo))
 (print(get 'rossi'regione))
 (print "verdi")
 (print(get 'verdi'qualifica))
 (print(get 'verdi'indirizzo))
 (print(get 'verdi'regione))
 (print "bianchi")
 (print(get 'bianchi'qualifica))
 (print(get 'bianchi'indirizzo))
 (print(get 'bianchi'regione))
 (terpri)
;-------------------------------------
 (print(get 'rossi'qualifica))
 (print(get 'verdi'qualifica))
 (print(get 'bianchi'qualifica))
;-------------------------------------
 (terpri)
 (print(symbol-plist'rossi))
 (print(symbol-plist'verdi))
 (print(symbol-plist'bianchi))

)

;gestione liste proprieta'
;-------------------------------------
;inserimento dati per ogni record
;stampa dati per ogni record
;modifica valore per attributo
;elimina attributo da lista
;lista2


(prog1
 (print" ")
 (put'rossi'qualifica'(studente))
 (put'rossi'indirizzo'(via padova 4))
 (put'rossi'regione'(veneto))
 (put'verdi'qualifica'(dottore))
 (put'verdi'indirizzo'(via torino 4))
 (put'verdi'regione'(campania))
 (put'bianchi'qualifica'(studente))
 (put'bianchi'indirizzo'(via verona 4))
 (put'bianchi'regione'(lazio))
 (terpri)
 ;-----------------------------------
 (print "rossi")
 (print(get 'rossi'qualifica))
 (print(get 'rossi'indirizzo))
 (print(get 'rossi'regione))
 (print "verdi")
 (print(get 'verdi'qualifica))
 (print(get 'verdi'indirizzo))
 (print(get 'verdi'regione))
 (print "bianchi")
 (print(get 'bianchi'qualifica))
 (print(get 'bianchi'indirizzo))
 (print(get 'bianchi'regione))
 (terpri)
;-------------------------------------
 (print(get 'rossi'qualifica))
 (print(get 'verdi'qualifica))
 (print(get 'bianchi'qualifica))
;-------------------------------------
 (terpri)
 (print(symbol-plist'rossi))
 (print(symbol-plist'verdi))
 (print(symbol-plist'bianchi))
;-------------------------------------
 (terpri)
 (print(get'rossi'qualifica))
 (setf(get'rossi'qualifica)'impiegato)
 (print(get'rossi'qualifica))
 (terpri)
 (remprop 'rossi'qualifica)
 (print(get'rossi'qualifica))
 ;------------------------------------
 (terpri)

)

;gestione liste
3 > ;aggiunge argomento1 come primo elemento di argomento2(lista)
3 > (setq lista'(bianco rosso nero))
(BIANCO ROSSO NERO)
3 > (cons'argomento1 lista)
(ARGOMENTO1 BIANCO ROSSO NERO)
3 > (cons 'argomento1 '(alto basso corto lungo))
(ARGOMENTO1 ALTO BASSO CORTO LUNGO)
3 > ;-----------------------------------
3 > ;se argomento2 diverso da lista,torna coppia puntata
3 > (cons 'argomento1 'argomento2)
(ARGOMENTO1 . ARGOMENTO2)
3 > (cons 'argomento1 '())
(ARGOMENTO1)
5 > (cons 'argomento1 nil)
(ARGOMENTO1)
5 > (cons lista nil)
((BIANCO ROSSO NERO))
5 > (cons nomelista nil)
((CAMBIO CONTENUTO LISTA))
5 > ;------------------------------------------------------
5 > (list 'rosso'verde)
(ROSSO VERDE)
5 > (list 'nero lista'nuova 'ultimo)
(NERO (BIANCO ROSSO NERO) NUOVA ULTIMO)
5 > ;-----------------------------------------------------
5 > (setq lista2'(alto basso))
(ALTO BASSO)
5 > (setq lista3'(lungo corto))
(LUNGO CORTO)
5 > (append lista3 lista2)
(LUNGO CORTO ALTO BASSO)
5 > (append () lista 2)
(BIANCO ROSSO NERO . 2)
5 > (append () lista2)
(ALTO BASSO)
5 > (append lista2 nil)
(ALTO BASSO)
5 > (append lista3 nil)
(LUNGO CORTO)
5 > (append () lista3 lista2)
(LUNGO CORTO ALTO BASSO)
5 > ;-----------------------------------------------------
5 > 

;gestione liste (comprese tra parentesi) con 0 o n elementi
? ;elementi singoli=ATOMI o elementi tra parentesi(SOTTOLISTE)
? ;ESTRAZIONE PRIMO ELEMENTO DA LISTA con CAR
? (setq nomelista'(bianco rosso nero))
(BIANCO ROSSO NERO)
? (car nomelista)
BIANCO
? ;-------------------------------
? (car '((bianco rosso)(nero verde)(viola)))
(BIANCO ROSSO)
? ;------------------------------------------
? ;elimina ultimo elemento di una lista con CDR
?(setq nomelista'(alto basso lungo corto))
(ALTO BASSO LUNGO CORTO)
1 > (cdr nomelista)
(BASSO LUNGO CORTO)
1 > (cdr '((rosso verde)(alto basso)(lungo corto)))
((ALTO BASSO) (LUNGO CORTO))
1 > ;--------------------------------------------
1 > (car(cdr(cdr'((alto basso)(lungo corto)(viola)))))
(VIOLA)
1 > ;--------------------------------------------------
(caddr'((alto basso)(lungo corto)(viola)))
(VIOLA)
2 >(list nomelista)
((ALTO BASSO LUNGO CORTO))
3 > (setq nomelista'(cambio contenuto lista))
(CAMBIO CONTENUTO LISTA)
3 > (list nomelista)
((CAMBIO CONTENUTO LISTA))
3 > ;-------------------------------------------------------
3 > (setq x'(1 2(3 4)5 6))
(1 2 (3 4) 5 6)
3 > (setf(car x) '(ab))
(AB)
3 > (print x)

((AB) 2 (3 4) 5 6) 
((AB) 2 (3 4) 5 6)
3 > x
((AB) 2 (3 4) 5 6)
3 > (setf(caddr x) 'p)
P
3 > x
((AB) 2 P 5 6)
3 > ;-----------------------------------------
3 > (setf y'(7 6 5))
(7 6 5)
3 > y
(7 6 5)
3 > ;--------------lista1----------------------
3 > 

ritorna