Interprete Lisp in Python

Un post un po’ particolare, insolito. Ma ultimamente sono attivi due autori über-bravi, Robitex e Dikiyvolk e allora vado con questa cosa difficile da definire.lambdaRecentemente sono finito invischiato in una cosa che non so bene come raccontare. E che continuava a venirmi in mente anche quando pensavo a altro, insomma ne sono stato completamente invischiato. E vorrei coinvolgere anche voi. Comincio con il presentare l’autore: Michael Nielsen un australiano che sta negli USA e si definisce a writer, scientist, and programmer.

Allora c’è questo post Lisp as the Maxwell’s equations of software (code repository) che parte con un paio di reminescenze personali per finire in un progetto inutile in ultima analisi ma fantastico: costruire un interprete Lisp minimale, funzionante e completo e farlo in Python.

C’è riuscito e molto bene. Per onestà occorre dire che si è basato su una cosa simile di Peter Norvig di cui ho già accennato in passato ma conto di tornarci (dipende ovviamente dalle reazioni a questo post) e c’è riuscito benissimo.setIntanto parte con un minicorso del suo interprete Tiddlylisp (tiddlywinks è un vecchio gioco, ormai in disuso, conosciuto da noi come pulci). Tiddlylisp è piccolo ma completo. Certo mancano delle cose che in un interprete serio professionale si danno per scontate; un’istruzione dev’essere contenuta in una riga, per esempio e mancano costrutti usuali. Ma funziona e il corso di Michael è preciso e esauriente. Chi non conosce il Lisp può farsi un’idea precisa, tanto poi se passa a una versione vera scopre che ci sono i dialetti e ogni implementazione è una cosa a se e che ogni utente personalizza la sua copia fino a diventare incompatibile con il resto del mondo.

Se invece di usare interattivamente l’interprete gli si da un file di codice da eseguire la limitazione dell’istruzione monoriga cade e abbiamo (come Michael ci dimostra) la possibilità di risolvere compiti più complessi.pythonQuesta è la prima parte del post (sì è lungo, molto più lungo di quello che si trova di solito nei blog). Ma adesso viene il bello, cioè no, si continua ma adesso con Python. E c’è il codice e la descrizione che è non banale ma, in fondo, molto più semplice di quello che mi sarei immaginato.

Per finire si parla di costruire un interprete Lisp in (esatto) Lisp. E i commenti dei lettori ampliano ancora il discorso. Tutti più bravi di me, ovviamente.

Ecco, che ne pensate? Forse sono solo io a stupirmi di questo modo di intendere la programmazione, o è il mantra “Lisp is a programmable programming language“.

Poi, certo, si usano altre cose, C++, Java, Python, …
Io per diversi anni avevo solo il Fortran. Poi le cose sono peggiorate: è arrivato il Basic (non c’è mai limite al peggio).

Ancora una nota: lo cita anche Michael ma è troppo bello devo farlo anch’io: The Roots of Lisp di Paul Graham.

Posta un commento o usa questo indirizzo per il trackback.

Trackback

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.