Você deseja buscar um equilíbrio entre simplicidade e limpeza, recursos atraentes e uma plataforma que permitirá a você escrever software interessante e útil (para você mesmo), bem como servir como uma ferramenta de aprendizado. (Este último o ajudará a aprender por muito mais tempo.) Aqui estão algumas possibilidades:
Esquema. Provavelmente o mais limpo de todos os dialetos. É sem dúvida por isso que The Little Schemer foi traduzido do LISP para o Scheme. A quinta especificação padrão do Scheme, R5RS , é uma educação maravilhosa por si só; pode ser a melhor linguagem e especificação de biblioteca que já li, bem como a mais curta e razoavelmente abrangente. A plataforma PLT Scheme (agora Racket) inclui um interpretador e compilador razoavelmente decente, é boa para scripts e também tem algumas ferramentas visuais que a tornam excelente para o aprendizado.
Lisp comum. Provavelmente a variante mais portátil e abrangente, é mais provável que você queira se quiser escrever coisas como software comercial. O padrão define bibliotecas extensas, e muitos mais estão disponíveis além disso, ele tem CLOS , que provavelmente ensinará mais sobre OO do que qualquer linguagem OO poderia, e alguns dos compiladores são muito bons. As desvantagens incluem algumas falhas que o Scheme não possui (como ter um namespace separado para variáveis que se referem a funções), não ser tão limpo e simples (como é o caso de qualquer coisa que teve que ter as extensões e fazer os compromissos necessários para grandes aplicações no mundo real), não tendo macros higiênicas e enfatizando a recursão muito menos do que o Scheme.
Clojure.Isso é executado na JVM, o que pode ser uma vantagem para os desenvolvedores Java. Ele tem algumas falhas (por exemplo, você deve solicitar explicitamente a otimização da chamada final, embora isso possa mudar um dia se o TCO for adicionado à JVM). As macros, embora não sejam higiênicas, têm alguns recursos para ajudá-lo a evitar a captura de variáveis, de modo que você pode capturar variáveis se realmente quiser, enquanto corre menos risco de fazer isso acidentalmente do que no CL. Você tem acesso fácil a todas as bibliotecas Java; isso provavelmente é uma coisa boa para o código do "mundo real" e bastante inútil em termos de aprendizado. Possui um conjunto de bibliotecas para estruturas de dados persistentes e suporte para STM, o que o torna muito interessante do ponto de vista concorrente; isso a torna provavelmente a sua melhor aposta se você ' Estou interessado em aprender mais sobre novos métodos de lidar com programação simultânea e paralela. Parece que o Clojure é tão utilizável para grandes aplicativos de produção quanto Java, no sentido de que terá a capacidade de fazer as "coisas feias" que você faz em aplicativos de produção que você prefere não fazer e não fazer quando você está aprendendo.
Emacs Lisp. Em termos de LISP, este não é um dos melhores exemplos que existe. Uma de suas maiores falhas é o escopo dinâmico, mas existem muitas outras. No entanto, se você é um usuário Emacs, esta pode ser a ferramenta mais poderosa que você pode aprender para melhorar o uso do editor. Quanto você realmente aprenderia ao aprender Emacs Lisp, além de como estender o Emacs, é para mim uma questão em aberto; Não sei com que frequência técnicas interessantes, como funções de alta ordem, são realmente usadas no Emacs Lisp.
Atualização de 2018
Já se passou quase uma década desde que escrevi este post e a família de linguagens Lisp agora parece estar ganhando força significativa na consciência geral do programador. Muito disso parece estar relacionado ao Clojure, que não apenas se tornou um dialeto separado do Lisp por si só, introduzindo muitas de suas próprias boas ideias, mas também agora tem uma versão quase idêntica voltada para o JavaScript e inspirou muitos outros Lisps visando outras plataformas. Por exemplo, Hy tem como alvo o CPython AST e bytecode, visando primeiro a interoperabilidade com Python, mas usando ideias Clojure "em caso de dúvida". (Embora a partir dos últimos commits, o último pode estar mudando um pouco.)
A grande mudança que isso traz em seu processo de tomada de decisão é que você também deve olhar para qualquer Lisps ou linguagens semelhantes a Lisp disponíveis e interoperar com linguagens ou plataformas que você já usa, seja Perl , Ruby , Erlang , Go ou mesmo C ++ em microcontroladores .