Pergunta

Eu realmente sinto que deveria aprender Lisp e há muitos recursos bons por aí para me ajudar a fazer isso.

Não me incomodo com a sintaxe complicada, mas onde na "programação comercial tradicional" encontraria lugares onde faria sentido usá-la em vez de uma linguagem processual.

Existe um aplicativo comercial matador que foi escrito em Lisp?

Foi útil?

Solução

Um dos principais usos do Lisp é em Inteligência Artificial.Um amigo meu da faculdade fez um curso de pós-graduação em IA e para seu projeto principal escreveu um "Luzes apagadas"solucionador em Lisp.Várias versões de seu programa utilizaram rotinas de IA ligeiramente diferentes e testes em cerca de 40 computadores produziram alguns resultados bastante interessantes (eu gostaria que estivesse em algum lugar online para eu vincular, mas não acho que esteja).

Há dois semestres usei Scheme (uma linguagem baseada em Lisp) para escrever um programa interativo que simulava a rotina "Who's on First" de Abbott e Costello.A entrada do usuário foi comparada com algumas estruturas de dados bastante complicadas (semelhantes a mapas em outras linguagens, mas muito mais flexíveis) para escolher qual seria a resposta apropriada.Também escrevi uma rotina para resolver um 3x3 quebra-cabeça de slides (um algoritmo que poderia ser facilmente estendido a quebra-cabeças de slides maiores).

Em resumo, aprender Lisp (ou Scheme) pode não produzir muitas aplicações práticas além da IA, mas é uma experiência de aprendizagem extremamente valiosa, como muitos outros afirmaram.Programar em uma linguagem funcional como Lisp também ajudará você a pensar recursivamente (se você teve problemas com recursão em outras linguagens, isso pode ser de grande ajuda).

Outras dicas

Lisp é uma linguagem grande e complexa com um tempo de execução grande e complexo para suportá-la.Por esse motivo, Lisp é mais adequado para problemas grandes e complicados.

Agora, um complexo problema não é o mesmo que um complicado um.A complexo O problema é aquele com muitos pequenos detalhes, mas que não é difícil.Escrever um sistema de reservas de companhias aéreas é um negócio complexo, mas com dinheiro e programadores suficientes não é difícil.Entendeu a diferença?

Um problema complicado é aquele que é complicado, onde a tradicional divisão para conquistar não funciona.Controlar um robô, ou trabalhar com dados que não sejam tabulares (linguagens, por exemplo), ou situações altamente dinâmicas.

Lisp é realmente adequado para problemas onde a solução deve ser expansível;o exemplo clássico é o editor de texto emacs.É totalmente programável e, portanto, um ambiente de programação por si só.

Em seu famoso livro PAIP, Norvig diz que Lisp é ideal para programação exploratória.Ou seja, programar uma solução para um problema que não é totalmente compreendido (em oposição a um sistema de reservas on-line).Em outras palavras:Problemas complicados.

Além disso, aprender Lisp irá lembrá-lo de algo fundamental que foi esquecido:A diferença entre Von Neumann e Turing.Como sabemos, o modelo de computação de Turing é um modelo teórico interessante, mas inútil como modelo para projetar computadores.Von Neumann, por outro lado, projetou um modelo de como os computadores e a computação deveriam ser executados:O modelo de Von Neumann.O ponto central do modelo de Von Neumann é que você tem apenas uma memória e armazena seu código e seus dados nela.Observe cuidadosamente que um programa Java (ou C#, ou o que você preferir) é uma manifestação do modelo de Turing.Você define seu programa em concreto, de uma vez por todas.Então você espera poder lidar com todos os dados que são lançados nele.

Lisp mantém o modelo Von Neuman;não existe uma fronteira nítida e pré-determinada entre código e dados.Programar em Lisp abre sua mente para o poder do modelo Von Neumann.Programar em Lisp faz você ver conceitos antigos sob uma nova luz.

Finalmente, sendo interativo, você aprenderá a interagir com seus programas à medida que os desenvolve (em vez de compilá-los e executá-los).Isso também muda a maneira como você programa e como vê a programação.

Com esta introdução posso finalmente oferecer uma resposta à sua pergunta:Você encontrará lugares onde ela supera as línguas "tradicionais"?

Se você é um programador avançado, precisa de ferramentas avançadas.E não existe ferramenta mais avançada que o Lisp.Ou, em outras palavras:A resposta é sim se seus problemas forem difíceis.Não de outra forma.

Em resposta a @lassevk:

alt text

sintaxe complicada??

A sintaxe para lisp é incrivelmente simples.

Aplicativo matador escrito em lisp: emacs.Lisp permitirá que você estenda o emacs à vontade para fazer quase tudo que você possa imaginar que um editor possa fazer.

Mas, você só deve aprender lisp se você querer para, e você talvez nunca consiga usar no trabalho, mas ainda assim é incrível.

Além disso, quero adicionar:mesmo se você encontrar lugares onde lisp fará sentido, provavelmente não convencerá ninguém de que ele deve ser usado em java, c++, c#, python, ruby, etc.

Não posso responder por experiência própria, mas você deveria ler o que Paulo Graham escreveu em Lisp.Quanto à parte do “app matador”, leia Superando as médias.

Programei em Lisp profissionalmente por cerca de um ano e definitivamente vale a pena aprender.Você terá uma oportunidade incomparável de remover a redundância do seu código, sendo capaz de substituir todo o código clichê por funções sempre que possível e macros quando não for possível.Você também poderá acessar uma flexibilidade incomparável em tempo de execução, traduzindo livremente entre código e dados.Assim, situações em que as ações do usuário podem desencadear a necessidade de construir estruturas complexas de forma dinâmica é onde o Lisp realmente brilha.Os programadores de voos de companhias aéreas populares são escritos em Lisp, e também há muitos CAD/CAM em Lisp.

Lisp é muito útil para criar pequenas DSLs.Eu tenho uma cópia do Lisp in a Box em execução no trabalho e escrevi pequenas DSLs para interrogar bancos de dados do servidor SQL e gerar camadas de dados, etc., em C#.Todo o meu código padrão agora é escrito em macros lisp que geram saída para C#.Eu gero HTML, XML, todo tipo de coisa com ele.Embora eu desejasse poder usar o Lisp para codificação diária, o Lisp pode trazer benefícios práticos.

Se você gosta de programar, deveria aprender Lisp pelo puro prazer de fazê-lo. XKCD expressa perfeitamente a iluminação intelectual que se segue.Aprender Lisp é para o programador o que a meditação é para o monge budista (e eu quis dizer isso sem qualquer conotação blasfema).

Qualquer linguagem parece muito mais difícil quando não se usam as convenções de indentação comuns de uma linguagem.Quando alguém os segue no Lisp, vê como ele expressa uma estrutura de árvore de sintaxe com bastante facilidade (observe, isso não está certo porque a visualização fica um pouco;os r's devem estar alinhados com os fns no argumento recursivo do quicksort):

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))

Descobri que aprender uma nova linguagem sempre influencia seu estilo de programação em linguagens que você já conhece.Para mim sempre me fez pensar em diferentes maneiras de resolver um problema na minha linguagem principal, que é Java.Acho que, em geral, isso apenas amplia o seu horizonte em termos de programação.

Fiz uma “aula de ceceio” na faculdade, nos anos oitenta.Apesar de grocar todos os conceitos apresentados na aula, fiquei sem qualquer apreciação pelo que torna o lisp excelente.Receio que muitas pessoas vejam o lisp apenas como mais uma linguagem de programação, que foi o que aquele curso na faculdade fez por mim há tantos anos.Se você vir alguém reclamando da sintaxe do lisp (ou da falta dela), há uma boa chance de que essa pessoa seja uma daquelas pessoas que não conseguiu compreender a grandeza do lisp.Eu fui uma dessas pessoas por muito tempo.

Só duas décadas depois, quando reacendi meu interesse pelo lisp, é que comecei a "entender" o que torna o lisp interessante - pelo menos para mim.Se você conseguir aprender lisp sem se surpreender com fechamentos e macros lisp, provavelmente não entendeu.

Aprender LISP/Scheme pode não aumentar o espaço do aplicativo, mas ajudará você a ter uma noção melhor da programação funcional, suas regras e exceções.

Vale a pena investir tempo apenas para aprender a diferença na beleza de seis funções puras aninhadas e o pesadelo de seis funções aninhadas com efeitos colaterais.

De http://www.gigamonkeys.com/book/introduction-why-lisp.html

Um dos mitos mais repetidos sobre Lisp é que está "morto". Embora seja verdade que o Lisp comum não seja tão amplamente utilizado quanto, digamos, Visual Basic ou Java, parece estranho descrever uma linguagem que continua sendo usada para um novo desenvolvimento e que continua a atrair novos usuários como "mortos". Algumas histórias recentes de sucesso do Lisp incluem o ViaWeb de Paul Graham, que se tornou uma loja do Yahoo quando o Yahoo comprou sua empresa;O sistema de preços e compras da ITA Software, QPX, usado pelo vendedor de ingressos on -line Orbitz e outros;O jogo de cachorro Naughty para o PlayStation 2, Jak e Daxter, que é amplamente escrito em um dialeto lisp específico do domínio, travesso de cachorro inventado chamado Goal, cujo compilador é escrito em comum;e o Roomba, o aspirador de aspirador robótico autônomo, cujo software é escrito em L, um subconjunto de Lisp comum.Talvez ainda mais revelador seja o crescimento do site Common-Lisp.net, que hospeda projetos Lisp comuns de código aberto, e o número de grupos de usuários locais que surgiram nos últimos dois anos.

"Vale a pena aprender Lisp pela profunda experiência de iluminação que você terá quando finalmente consegui-lo;essa experiência fará de você um programador melhor pelo resto de seus dias, mesmo que você nunca use muito o Lisp."

--Érico S.Raymond, "Como se tornar um hacker"

http://www.paulgraham.com/avg.html

Concordo que Lisp é uma daquelas linguagens que você nunca usará em um ambiente comercial.Mas mesmo que você não consiga, aprendê-lo certamente expandirá sua compreensão da programação como um todo.Por exemplo, aprendi Prolog na faculdade e, embora nunca mais o tenha usado, proporcionei-me uma maior compreensão de muitos conceitos de programação e (às vezes) uma maior apreciação pelas linguagens que utilizo.

Mas se você quiser aprender... por favor, leia No Lisp

Ok, posso ser estranho, mas realmente não gosto muito dos ensaios de Paul Graham e sobre Lisp é um livro muito difícil se você ainda não tem alguma noção de Common Lisp.Em vez disso, eu diria para ir para o Siebel's Lisp comum prático.Quanto aos "aplicativos matadores", o Common Lisp parece encontrar seu lugar em lojas de nicho, como ITA, portanto, embora não exista um aplicativo sinônimo de CL da mesma forma que Rails é para Ruby, há locais na indústria que o utilizam se você pesquisar um pouco.

Se você tiver que se perguntar se deveria aprender lisp, provavelmente não será necessário.

Aprender lisp colocará o Javascript sob uma luz completamente diferente!Lisp realmente força você a compreender a recursão e todo o paradigma das "funções como objetos de primeira classe".Veja o excelente artigo de Crockford sobre Esquema vs Javascript.Javascript é talvez a linguagem mais importante da atualidade, então entendê-la melhor é imensamente útil!

O Script-Fu do Gimp é bobo.Esse é um aplicativo matador de Photoshop.

Sintaxe complicada?A beleza do lisp é que ele possui uma sintaxe ridiculamente simples.É apenas uma lista, onde cada elemento da lista pode ser outra lista ou um tipo de dados elementar.

Vale a pena aprender porque aprimora sua capacidade de codificação para pensar e usar funções como apenas outro tipo de dados.Isso melhorará a maneira como você codifica em uma linguagem imperativa e/ou orientada a objetos, pois permitirá que você seja mais flexível mentalmente na forma como seu código é estruturado.

Para adicionar às outras respostas:

Porque o SICP curso (os vídeos estão disponíveis aqui) é incrível:te ensina Lisp e muito mais!

Aplicativo matador? Francisco Inc. tem uma longa lista de histórias de sucesso, mas esta lista inclui apenas usuários do AllegroCL...Provavelmente existem outros.Meu favorito é a história sobre Naughty Dog, já que era um grande fã dos jogos Crash Bandicoot.

Para aprender Common Lisp, eu recomendo Lisp comum prático.Tem uma abordagem prática que, pelo menos para mim, tornou tudo mais fácil do que outros livros que li.

Você poderia usar Clojure hoje para escrever testes e scripts no Java VM.Embora existam outras linguagens Lisp implementadas na JVM, acho que Clojure faz o melhor trabalho de integração com Java.

Há momentos em que a própria linguagem Java atrapalha a escrita de testes para código Java (incluindo a "programação comercial tradicional").(Não quero dizer isso como uma acusação ao Java - outras linguagens sofrem do mesmo problema - mas é um fato.Já que o assunto não é Java, não vou entrar em detalhes.Sinta-se à vontade para iniciar um novo tópico se alguém quiser discuti-lo.) O Clojure elimina muitos desses obstáculos.

Lisp pode ser usado em qualquer lugar onde você use programação tradicional.Não é tão diferente, é apenas mais poderoso.Escrevendo um aplicativo da web?você pode fazer isso no Lisp, escrevendo um aplicativo de desktop?você pode fazer isso em Lisp, seja o que for, provavelmente você pode fazer isso em Lisp, ou Python, ou qualquer outra programação genérica (existem algumas linguagens que são adequadas para apenas uma tarefa).

O maior obstáculo provavelmente será a aceitação do seu chefe, dos seus colegas ou dos seus clientes.Isso é algo que você terá que trabalhar com eles.Escolher uma solução pragmática como Clojure que podem aproveitar a base instalada atual da infraestrutura Java, da JVM às bibliotecas, podem ajudá-lo.Além disso, se você tiver um programa Java, poderá criar uma arquitetura de plug-in e escrever plug-ins Clojure para ele e acabar escrevendo metade do seu código em Clojure.

Não é uma razão, mas (trivial) o AutoCAD tem suporte para tempo de execução LISP e DCL.É uma maneira conveniente de escrever macros complexas (incluindo automação ActiveX) se você não quiser usar VBA ou seus SDKs C++ ou .NET, ou se uma expressão DIESEL não funcionar.

Muitas funções do AutoCAD são, na verdade, rotinas LISP.

Este é um tema sobre o qual já ponderei há algum tempo, mas ainda não cheguei a uma decisão, pois normalmente o tempo é o principal problema...;)

E como não consigo encontrar esses links até agora neste post, adiciono-os para interesse público:

História de sucesso e fracasso:Lispando no JPL

História de sucesso realmente impressionante:Lisp em uso na corporação Orbitz

Comparação e análise sobre se deve usar Lisp em vez de Java:Lisp como alternativa ao Java

A sintaxe é irrelevante, a legibilidade não!

Não estou dizendo que este é um aplicativo matador, mas parece que pode ser legalhttp://code.google.com/p/plop/

Aplicativo matador?O mecanismo de busca de voos da ITA Software é um deles.

Quanto ao "porquê", provavelmente fará de você um desenvolvedor melhor e é extremamente improvável que o torne um desenvolvedor pior.No entanto, pode fazer com que você prefira dialetos lisp a outros idiomas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top