Vuoi cercare un equilibrio tra semplicità e pulizia, caratteristiche attraenti e una piattaforma che ti permetta di scrivere software interessante e utile (per te stesso) oltre a servire come strumento di apprendimento. (Quest'ultimo ti farà andare avanti e imparare per molto più tempo.) Ecco alcune possibilità:
Schema. Probabilmente il più pulito di tutti i dialetti. Questo è senza dubbio il motivo per cui The Little Schemer è stato tradotto da LISP in Scheme. La quinta specifica dello standard Scheme, R5RS , è un'istruzione meravigliosa in sé e per sé; potrebbe essere il linguaggio e le specifiche della libreria più belli che abbia mai letto, nonché il più breve che è ragionevolmente completo. La piattaforma PLT Scheme (ora Racket) include un interprete e un compilatore abbastanza decenti, è utile per lo scripting e ha anche alcuni strumenti visivi che lo rendono eccellente per l'apprendimento.
Common Lisp. Probabilmente la variante più portatile e completa, questo è molto probabilmente quello che vuoi se vuoi scrivere cose come software commerciale. Lo standard definisce ampie librerie, e molte altre sono disponibili oltre a questo, ha CLOS , che probabilmente ti insegnerà di più su OO di quanto potrebbe fare qualsiasi linguaggio OO, e alcuni dei compilatori sono molto buoni. Gli svantaggi includono alcune verruche che Scheme non ha (come avere uno spazio dei nomi separato per variabili che si riferiscono a funzioni), non essendo così pulite e semplici (come nel caso di tutto ciò che ha dovuto avere le estensioni e rendere necessari i compromessi per grandi applicazioni nel mondo reale), non avendo macro igieniche e sottolineando la ricorsione molto meno di Scheme.
Clojure.Funziona sulla JVM, che potrebbe dare un vantaggio proprio lì per gli sviluppatori Java. Ha alcune verruche (ad esempio, è necessario chiedere esplicitamente l'ottimizzazione della chiamata di coda, sebbene questo possa cambiare un giorno se il TCO viene aggiunto alla JVM). Le macro, sebbene non igieniche, hanno alcune funzionalità per aiutarti a evitare l'acquisizione di variabili, quindi puoi catturare le variabili se lo desideri, correndo meno rischi di farlo accidentalmente rispetto a CL. Hai un facile accesso a tutte le librerie Java; questa è probabilmente una buona cosa per il codice del "mondo reale" e abbastanza inutile in termini di apprendimento. Ha una serie di librerie per strutture dati persistenti e supporto per STM, che lo rendono molto interessante da un punto di vista concorrente; questo lo rende probabilmente la soluzione migliore se tu ' sei interessato a saperne di più sui nuovi metodi di gestione della programmazione concorrente e parallela. Sembra che Clojure sia utilizzabile per applicazioni di produzione di grandi dimensioni come Java, nel senso che avrà la capacità di fare le "cose brutte" che fai nelle app di produzione che preferiresti non fare e non fare quando stai imparando.
Emacs Lisp. In termini di LISP, questo non è uno dei migliori esempi in circolazione. Uno dei suoi maggiori difetti è lo scoping dinamico, ma ce ne sono molti altri. Tuttavia, se sei un utente Emacs, questo potrebbe essere lo strumento più potente che puoi imparare per migliorare il tuo uso dell'editor. Quanto impareresti davvero imparando Emacs Lisp, oltre a come estendere Emacs, è per me una questione aperta; Non so quante volte tecniche interessanti come le funzioni di ordine elevato siano realmente utilizzate in Emacs Lisp.
Aggiornamento 2018
È passato quasi un decennio da quando ho scritto questo post e la famiglia di linguaggi Lisp ora sembra stia guadagnando una significativa trazione nella coscienza generale del programmatore. Molto di questo sembra essere correlato a Clojure che non solo è diventato un dialetto adeguatamente separato del Lisp a sé stante, introducendo molte delle sue buone idee, ma ora ha anche una versione quasi identica che mira a JavaScript e ha ispirato molti altri Lisp targeting di altre piattaforme. Ad esempio, Hy prende di mira CPython AST e bytecode, mirando prima all'interoperabilità con Python, ma utilizzando le idee Clojure "in caso di dubbio". (Anche se dagli ultimi commit, quest'ultimo potrebbe cambiare un po '.)
Il grande cambiamento che questo comporta nel tuo processo decisionale è che dovresti anche guardare a qualunque linguaggio Lisps o simile a Lisp sia disponibile e interagire con i linguaggi o le piattaforme che già usi, che si tratti di Perl , Ruby , Erlang , Go o anche C ++ su microcontrollori .