Programmare in Lisp

Wikibooks, manuali e libri di testo liberi.

Conoscere il Lisp[modifica]

Conosciuto come il linguaggio delle parentesi infinite, nasconde una sintassi pulita e assolutamente semplice che attraverso una sintassi minimale realizza tutta la semantica del linguaggio che oggi consente di essere competitivo respetto a tutti i linguaggi presenti sul mercato. Oltre a distribuzioni a pagamento è disponibile anche in versioni Open Source (vedi paragrafo "Linguaggi" ). Per facilitare l'uso faremo una breve introduzione ad Emacs a Slime editor e interfaccia al lisp (nulla vieta che impiegate un quasiasi Editor di vostra conoscenza) e passo passo con esempi pronti all'uso l'utente potrà destreggiarsi con il linguaggio.

Lisp è l'acronimo di parser ed Interprete di liste di S-Expression, fà parte dei linguaggi REPL ( read, execute, print, list) (legge, esegue, stampa e lista) che consente mediante un parser di interpretare eseguire e rigenerare il codice e i dati nella forma di S-Expression)

In questi esempi installeremo il lisp, emacs, e slime su piattaforme Linux, Windows, Mac, confermando che si tratta dei miglior software con portabilità applicativa e velocità di esecuzione.

Il Lisp è compilabile nella forma di eseguibili senza perdere la sua capacità di rigenerazione ed esecuzione delle S-expression. Si avete capito bene è un linguaggio che modifica e genera se stesso (codice e dati) ed è in grado di eseguire ciò che crea. Per questa particolarità dagli anni 50 e stato impiegato come strumento di eccellenza per l'intelligenza artificiale si che si tratti di semantica dei domini di una sistema euristico, sia che si tratti di Neuroni software emulati artificialmente. Nel lisp i dati ed il codice hanno la medesima forma di S-Expression. Nel Lisp i dati vengono tipizzati quando il codice li utilizza, ma il tipo può cambiare a piacimento del programmatore per adattarsi alle esigenze applicative in corso d'opera. Il lisp può interfacciarsi con librerie e codice scritto in altri linguaggi per adattarlo a hardware o a specifiche funzioni dell'utente.

S-Expression[modifica]

La forma più atomica di una S-Expression è nella forma:

'( NIL . NIL )

Rappresenta una cella di memoria con due elementi (Car e Cdr di cui parleremo dopo) che non puntano a nulla. Questo codice non serve a nulla ma da un esempio di forma minimalista della S-Experession.

Forme operative di S-Expression sono:

(+ 1 1 2 3 5 8 11)

(* 2 ( / 3 4) )

(defun mysquare (x ) ( * x x ))

'( 2 . "apertura" )

Come si vede dal codice una S-expression inizia con una parentesi e si chiude con una parentesi ed al suo interno sono presenti elementi spaziati (altro codice o dati ) o altri livelli di S-Expression nidificate all'infinito.

il codice legge la vostra stringa digitata sul terminale fino a che non si presenta la parentesi che chiude la S-expression più esterna del sistema nidificato che avete scritto. Solo a questo punto la valuta (eval) e stampa il risultato della funzione di esecusione/valutazione del codice o dati che avete digitato. Questo è un linguaggio interattivo ed immediato che riceve esegue e risponde.