Nel corso di Modelli e Complessità che sto seguendo è stato introdotto il Lisp (List Processor o meglio Lots of Infuriating & Silly Parenthesis) come esempio di linguaggio funzionale.
Come ho accennato in passato la programmazione funzionale è un tipo di paradigma che pone l’accento sulla definizione di funzioni poichè il flusso del programma assume la forma di valutazione di funzioni matematiche e in particolare delle funzioni ricorsive.
Senza addentrarci troppo in tecnicismi di informatica teorica passiamo subito ad affrontare la “pratica” con il linguaggio Lisp.
E’ importante precisare però che il Lisp, sebbene funzionale, può benissimo essere usato come linguaggio imperativo. Tuttavia non affronteremo questo argomento in questo momento.
In questo tutorial useremo come shell di interprete GCL (GNU Common Lisp) e come editor Emacs (utilizzeremo Emacs non solo perchè è esso stesso scritto in Lisp 🙂 ma perchè ci fornisce facilmente la colorazione della sintassi e altre cosine utili che altri editorn non forniscono).
Installare CGL.
Per prima cosa dobbiamo installare l’interprete. Di interpreti per il Lisp ed i relativi dialetti esistono una montagna di shell (ad esempio clisp, cmucl, e altri) ma noi useremo GCL perchè l’ho trovata la meno “incasinata” per molti comandi essenziali ed è conforme agli altri applicativi GNU.
Per installarla è veramente molto semplice. Basta digitare il classico
apt-get install gcl
e eventualmente
apt-get install gcl-doc
con privilegi di root (con sudo o su) per avere la nostra shell (e la sua documentazione) completamente funzionante avviabile con un semplice:
gcl
Installare EMACS.
Anche installare EMACS è qualcosa di semplicissimo, basta digitare:
apt-get install emacs emacs22-gtk
PS: Esistono centinaia di pacchetti ed estenzioni di emacs per fargli fare qualunque cosa, dal giocare a scacchi, ad usarlo come client per MSN e Jabber, ma ovviamente credo sia roba superflua per ora!
Scrivere il nostro primo file Lisp.
Potremmo utilizzare il Lisp anche direttamente dalla shell gcl ma, come forse noterete, è molto più comodo scrivere su un file tutto il codice e passarlo direttamente alla shell. In questo modo potremmo salvare il nostro programma, creare moduli da riutilizzare in seguito o semplicemente evitare di riscrivere ogni volta da capo funzioni complesse.
Per fare questo apriamo Emacs.
Ora io utilizzerò le scorciatoie da tastiera, sebbene gli stessi comandi si possono fare per via grafica, perché le trovo estremamente più veloci.
Aprite un file (esistente o non) premendo:
CTRL + x
CTRL + f
E digitando il nome del file e il relativo percorso (si può navigare facilmente con TAB).
Creiamo ad esempio il file primo_lisp.lisp.
Ora possiamo scrivere il programma che ci pare. Una volta finito salviamo premendo:
CTRL + x
CTRL + s
Adesso che il nostro file è salvato abbiamo due modi per eseguirlo:
- Digitando da terminale gcl -f primo_lisp.lisp
- O ancora meglio aprendo gcl da terminale e importando il file direttamente dalla shell con il comando (load “primo_lisp.lisp”)
Grazie a questo secondo metodo potremo fare prove sulle funzioni definite in “primo_lisp.lisp”. Ad esempio possiamo usare due ottime funzioni di debugging:
- il comando (describe A) che stampa a schermo la descrizione dell’oggetto A (ovvero se è una funzione, un numero, una lista, ecc…
- il comando (step A) che esegue le funzioni specificate in A passo per passo!! Veramente ottimo per il debug.
Non vi resta che provare a scrivere alcune funzioni e provare questi comandi per prendere confidenza!
ciao,
sono un novizio del LISP; ci sono arrivato interessandomi del lavoro svolto dal compositore americano David Cope riguardo l’uso dell’intelligenza artificiale in musica. Ho cercato inutilmente questi testi:
1) GUIDA ALL’USO DEL LINGUAGGIO LISP
Autore/Curatore: CHRISTIAN QUEINNEC; 2) LISP. LINGUAGGIO E METODOLOGIA DI P ROGRAMMAZIONE
Autore/Curatore: GIUSEPPINA GINI
ma sono esauriti. Potresti indicarmi se esistono altri testi simili in italiano? Cosa usate in Università?
Grazie
Umberto Coletta
Sei un grande, parlerò di te a RMS 🙂