Eu realmente sinto que devo aprender o Lisp e há muitos recursos bons por aí para me ajudar a fazê-lo.
Eu não estou desanimado com a sintaxe complicada, mas onde na "programação comercial tradicional" eu encontraria lugares onde faria sentido usá-lo em vez de uma linguagem processual.
Existe um aplicativo comercial assassino por aí escrito em Lisp?
functional-programming
lisp
David
fonte
fonte
Respostas:
Um dos principais usos do Lisp está na Inteligência Artificial. Um amigo meu na faculdade fez um curso de IA de pós-graduação e, para seu projeto principal, ele escreveu um solucionador de " Lights Out " em Lisp. Várias versões de seu programa utilizaram rotinas de IA ligeiramente diferentes e os testes em 40 computadores produziram alguns resultados bastante interessantes (eu gostaria que estivesse online em algum lugar para eu vincular, mas acho que não).
Dois semestres atrás, usei o Scheme (uma linguagem baseada no 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 outros idiomas, mas muito mais flexíveis) para escolher qual seria uma resposta apropriada. Também escrevi uma rotina para resolver um quebra-cabeça de slides 3x3 (um algoritmo que poderia ser facilmente estendido para quebra-cabeças de slides maiores).
Em resumo, aprender Lisp (ou Scheme) pode não gerar muitas aplicações práticas além da IA, mas é uma experiência de aprendizado extremamente valiosa, como muitas outras afirmaram. Programar em uma linguagem funcional como o Lisp também ajudará você a pensar recursivamente (se você teve problemas com a recursão em outros idiomas, isso pode ser uma grande ajuda).
fonte
Lisp é uma linguagem grande e complexa com um tempo de execução grande e complexo para suportá-lo. Por esse motivo, o Lisp é mais adequado para problemas grandes e complicados.
Agora, um problema complexo não é o mesmo que um problema complicado . Um problema complexo é 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 o tradicional dividir e conquistar não funciona. Controlando um robô ou trabalhando com dados que não são tabulares (idiomas, por exemplo) ou situações altamente dinâmicas.
O Lisp é realmente adequado para problemas em que 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 o 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 o lembrará 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 lá. Observe com cuidado que um programa Java (ou C #, ou o que você quiser) é 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 lançados nele.
Lisp mantém o modelo de Von Neuman; não há borda nítida e pré-determinada entre código e dados. A programação no Lisp abre sua mente para o poder do modelo de Von Neumann. A programação no Lisp faz com que você veja conceitos antigos sob uma nova luz.
Por fim, sendo interativo, você aprenderá a interagir com seus programas à medida que os desenvolve (em vez de compilar e executar). Isso também altera a maneira como você programa e como vê a programação.
Com esta introdução, finalmente posso oferecer uma resposta à sua pergunta: Você encontrará lugares onde ela supera os idiomas "tradicionais"?
Se você é um programador avançado, precisa de ferramentas avançadas. E não há 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.
fonte
Em resposta a @lassevk :
fonte
sintaxe complicada ??
A sintaxe do lisp é incrivelmente simples .
Aplicativo assassino escrito em lisp: emacs . O Lisp permitirá que você estenda o emacs à vontade para fazer praticamente qualquer coisa que um editor possa fazer.
Porém , você só deve aprender cisco se quiser , e talvez nunca consiga usá-lo no trabalho, mas ainda é incrível.
Além disso, quero acrescentar: mesmo que você encontre lugares onde o lisp fará sentido, você provavelmente não convencerá mais ninguém que ele deve ser usado sobre java, c ++, c #, python, ruby, etc.
fonte
Não posso responder por experiência própria, mas você deve ler o que Paul Graham escreveu no Lisp . Quanto à parte "killer-app", leia Batendo as médias .
fonte
Programei profissionalmente em Lisp 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, podendo substituir todo o código padrão por funções sempre que possível e macros onde não. 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 dinamicamente é onde o Lisp realmente brilha. Os agendadores de vôos de companhias aéreas populares são escritos em Lisp, e também há muito CAD / CAM em Lisp.
fonte
Se você gosta de programar, deve aprender o Lisp pela pura alegria. O XKCD expressa perfeitamente a iluminação intelectual que se segue. Aprender Lisp é para o programador o que é meditação para o monge budista (e eu quis dizer isso sem nenhuma conotação blasfema).
fonte
O Lisp é muito útil para criar pequenos DSLs. Eu tenho uma cópia do Lisp in a Box funcionando no trabalho e escrevi pequenas DSLs para interrogar os bancos de dados do SQL Server e gerar camadas de dados etc. em C #. Todo o meu código da placa da caldeira agora está escrito em macros lisp que são exibidas em C #. Eu gero HTML, XML, todo tipo de coisas com ele. Enquanto eu gostaria de poder usar o Lisp para a codificação diária, o Lisp pode trazer benefícios práticos.
fonte
Qualquer idioma parece muito mais difícil quando não se usa as convenções de recuo comuns de um idioma. Quando se segue o Lisp, vê-se 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 devem alinhar-se com o fns no argumento recursivo do quicksort):
fonte
let
e usar adefun
no início da função para definirfn
como ela não muda.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 de maneiras diferentes para resolver um problema na minha linguagem principal, que é o Java. Eu acho que, em geral, apenas amplia seu horizonte em termos de programação.
fonte
Se você tiver que se perguntar se deve aprender o cisco, provavelmente não precisará.
fonte
Tomei uma "aula cega" na faculdade nos anos oitenta. Apesar de ter grokking todos os conceitos apresentados na aula, fiquei sem nenhuma apreciação pelo que torna o cocô ótimo. Receio que muitas pessoas considerem o lisp apenas mais uma linguagem de programação, que é o que esse curso na faculdade fez por mim há muitos anos. Se você vir alguém reclamando da sintaxe do cisco (ou da falta dele), há uma boa chance de que seja uma daquelas pessoas que falharam em compreender a grandeza do cisco. Eu fui uma dessas pessoas por muito tempo.
Não foi até duas décadas depois, quando reacendi meu interesse pelo lisp, que comecei a "entender" o que torna o lisp interessante - para mim de qualquer maneira. Se você conseguir aprender cocô sem ter sua mente soprada por fechamentos e macros, provavelmente você não entendeu.
fonte
Aprender LISP / Esquema pode não oferecer mais espaço para aplicativos, mas ajudará você a ter uma melhor noção 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.
fonte
De http://www.gigamonkeys.com/book/introduction-why-lisp.html
fonte
"O Lisp vale a pena aprender pela profunda experiência de iluminação que você terá quando finalmente obtê-la; essa experiência o tornará um programador melhor para o resto dos seus dias, mesmo que você nunca use muito o Lisp."
- Eric S. Raymond, "Como se tornar um hacker"
http://www.paulgraham.com/avg.html
fonte
Concordo que o Lisp é um desses idiomas que você nunca pode usar em um ambiente comercial. Mas, mesmo que você não o consiga, o aprendizado definitivamente expandirá sua compreensão da programação como um todo. Por exemplo, eu aprendi Prolog na faculdade e, embora nunca o tenha usado, me deu uma compreensão maior de muitos conceitos de programação e (às vezes) uma apreciação maior pelas linguagens que uso.
Mas se você vai aprender ... por todos os meios, leia On Lisp
fonte
Aprender lisp colocará o Javascript sob uma luz completamente diferente! O Lisp realmente obriga você a entender a recursão e o paradigma "funções como objetos de primeira classe". Veja o excelente artigo de Crockfords sobre Scheme vs Javascript . O Javascript é talvez o idioma mais importante hoje em dia, portanto, entendê-lo melhor é imensamente útil!
fonte
O Script-Fu de Gimp é de lábios. Esse é um aplicativo matador de photoshop.
fonte
Ok, eu posso ser estranho, mas eu realmente não gosto muito dos ensaios de Paul Graham e no Lisp é um livro muito difícil, se você ainda não conhece o Common Lisp. Em vez disso, eu diria que vá para o Common Lisp prático da Siebel . Quanto aos "killer-apps", o Common Lisp parece encontrar seu lugar em nichos de lojas, como o ITA , portanto, embora não exista um aplicativo sinônimo de CL do jeito que o Rails é para Ruby, há locais na indústria que o usam se você o fizer um pouco de escavação.
fonte
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 por causa da maneira como 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, porque permitirá que você seja mais flexível mentalmente com a forma como seu código está estruturado.
fonte
Para adicionar às outras respostas:
Porque o curso SICP (os vídeos estão disponíveis aqui ) é incrível: ensina Lisp e muito mais !
fonte
Aplicativo assassino? A Franz Inc. possui uma longa lista de casos de sucesso , mas essa lista inclui apenas os usuários do AllegroCL ... Provavelmente existem outros. O meu favorito é a história do Naughty Dog , já que eu era uma grande fã dos jogos Crash Bandicoot.
Para aprender o Common Lisp, eu recomendaria o prático Common Lisp . Ele tem uma abordagem prática que, pelo menos para mim, tornou mais fácil do que outros livros que já vi.
fonte
Você poderia usar o Clojure hoje para escrever testes e scripts em cima da Java VM. Embora existam outras linguagens Lisp implementadas na JVM, acho que o 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 "programação comercial tradicional"). (Não quero dizer isso como uma acusação de Java - outras linguagens sofrem do mesmo problema - mas é um fato. Desde o tópico, não Java, não vou elaborar. Sinta-se à vontade para iniciar um novo tópico, se alguém quer discutir o assunto.) Clojure elimina muitos desses obstáculos.
fonte
O Lisp pode ser usado em qualquer lugar em que você use a 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 fazê-lo no Lisp, o que for, provavelmente pode fazê-lo no Lisp, no Python ou em qualquer outra programação genérica (existem algumas linguagens adequadas para apenas uma tarefa).
O maior obstáculo provavelmente será a aceitação de seu chefe, colegas ou clientes. Isso é algo que você terá que trabalhar com eles. A escolha de uma solução pragmática como o Clojure, que pode alavancar a base de instalação atual da infraestrutura Java, da JVM às bibliotecas, pode ajudá-lo. Além disso, se você tiver um programa Java, poderá fazer uma arquitetura de plug-in e escrever plug-ins Clojure para ele e acabar escrevendo metade do seu código no Clojure.
fonte
Não é uma razão, mas o AutoCAD (trivial) tem suporte a tempo de execução LISP e DCL. É uma maneira conveniente de escrever macros complexas (incluindo automação ActiveX) se você não quiser usar o VBA ou seus SDKs C ++ ou .NET, ou se uma expressão DIESEL não for suficiente.
Muitas funções do AutoCAD são na verdade rotinas LISP.
fonte
Este é um tópico que eu próprio ponderei há algum tempo, mas ainda não cheguei a uma decisão, já que o tempo usual é o principal problema ...;)
E como não consigo encontrar esses links facilmente neste post, os adiciono para interesse público:
História de sucesso e fracasso: Lisping na JPL
História de sucesso realmente impressionante: Lisp em uso na empresa Orbitz
Comparação e análise de usar Lisp em vez de Java: Lisp como uma alternativa para Java
fonte
Sintaxe é irrelevante, legibilidade não é!
fonte
Não estou dizendo que esse é um aplicativo matador, mas parece que poderia ser legal http://code.google.com/p/plop/
fonte
Aplicativo assassino? O mecanismo de busca de voos da ITA Software é um deles.
Quanto ao "porquê", provavelmente o tornará um desenvolvedor melhor e é extremamente improvável que o torne um desenvolvedor pior. Pode, no entanto, fazer você preferir dialetos lisp a outros idiomas.
fonte