domenica 22 settembre 2013

Lisp (cont.)


OK, abbiamo visto le liste e il modo di valutarle. E quello che non è una lista è un atomo, così:


Ma abbiamo bisogno di poter fare qualcosa con i risultati, tipo assegnarli a una variabile.
Sì, si può fare ma dobbiamo tener conto che l'interprete valuta tutto quello che gli dai. E poi non passiamo usare il simbolo = per via che fa la valutazione se due espressioni sono uguali, come dice il nome stesso.

È ora di introdurre un po' di roba, poca, mica come i linguaggi normali, il Lisp è super!

set setta una variabile a un valore:

(set x 8)
(set y (+ 12 20 10))
ma c'è un problema: quando l'interprete vede i simboli x e y tenta di valutarli e ci da errore


Atz! No, dai basta proteggerli. In italiano non funziona tanto bene ma si usa dire che si quotano, così:


OK, funziona ma dobbiamo scrivere ogni volta (quote nome_della_variabile)?
No, esiste una scorciatoia, setq:


A dire il vero setq ha un fratello setf. Con la versione che uso (newLISP) sono la stessa cosa, con altre versioni più seriose no: setq è una forma speciale, setf una macro, cosa che al momento trascuriamo.

Bella la storia di setq che quota la variabile!
Sì ma non la useremo quasi mai, c'è una scorciatoia...
Ma se era già quella una scorciatoia?
Ecco, è una scorciatoia della scorciatoia, questa:


OK, comincio a vedere dove vuoi arrivare, anzi adesso provo:


Pheego!
E hai notato che quando ci sono più valutazioni il Lisp restituisce sempre l'ultima?
Sì, nel set multiplo.

Ancora due o tre cose e poi sai tutto sul Lisp (quasy tutto).
Per costruire le liste usiamo cons:


Allora, vediamo se ho capito:
cons construisce una lista; () è la lista vuota ed è una lista come le altre; cons ha due parametri: un atomo e una lista;
se hai una lista ben formata (il primo elemento è un operatore gli altri dati) puoi evalutarla con eval.

Sì, ma c'è ancora una cosa: se la lista è solo fatta di dati puoi applycarle l'operatore, così:


Hmmm...
Beh da pensarci su un po', Ankh-Morpork non è stata costruita in un giorno (cit.).
E, quasi dismenticavo: newLISP è piccolo, free, c'è per Windows, lo trovi qui: newlisp.org.

Nessun commento:

Posta un commento