Por que eu deveria aprender Lisp?

votos
114

Eu realmente sinto que eu deveria aprender Lisp e há uma abundância de bons recursos lá fora para me ajudar a fazê-lo.

Eu não estou adiadas pela sintaxe complicada, mas onde na programação comercial tradicional Gostaria de encontrar lugares que faria sentido para usá-lo em vez de uma linguagem procedural.

Existe uma killer-app comercial lá fora, que foi escrito em Lisp?

Publicado 07/08/2008 em 14:54
fonte usuário
Em outras línguas...                            


29 respostas

votos
120

Lisp é uma linguagem grande e complexo com um tempo de execução grande e complexo para apoiá-lo. Por essa razão, Lisp é mais adequada para os problemas grandes e complicados.

Agora, um complexo problema não é o mesmo que um complicado um. Um complexo problema é com um monte de pequenos detalhes, mas que não é difícil. Escrevendo um sistema de reserva de linha aérea é um negócio complexo, mas com dinheiro e programadores o suficiente, não é difícil. Obter a diferença?

Um problema complicado é aquele que é complicado, uma onde tradicional divisão e conquistar não funciona. Controlar um robô, ou trabalhar com dados que não é tabular (línguas, por exemplo), ou situações altamente dinâmicas.

Lisp é muito bem adequado para problemas onde a solução deve ser expansível; O exemplo clássico é o editor emacs texto. É totalmente programável, e, assim, um ambiente de programação em seu próprio direito.

Em seu famoso livro PAIP , Norvig diz que Lisp é ideal para a programação exploratória. Ou seja, a programação de uma solução para um problema que não é totalmente compreendido (por 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 um modelo para a concepção de computadores. Von Neumann, por outro lado, desenhou um modelo de como computadores e computação eram para executar: O modelo de von Neumann. Central para o modelo de Von Neumann é que você tem, mas uma memória e armazenar tanto o seu código e seus dados lá. Observe cuidadosamente que um programa Java (ou C #, ou o que quiser) é uma manifestação do modelo de Turing. Você define o seu programa em concreto, uma vez por todas. Então você espero que você pode lidar com todos os dados que são jogados nele.

Lisp mantém o modelo Von Neuman; não há, pré-determinado borda afiada entre o código e os dados. Programação em Lisp abre sua mente para o poder do modelo de Von Neumann. Programação em Lisp faz você ver velhos conceitos em uma nova luz.

Finalmente, ser interativo, você vai aprender a interagir com seus programas como você desenvolvê-los (ao contrário de compilar e executar). Isso também mudar a maneira de programar, e o modo de exibição de programação.

Com esta introdução eu possa finalmente oferecer uma resposta à sua pergunta: Você vai encontrar lugares onde ela ofusca línguas "tradicionais"?

Se você é um programador avançado, você precisa de ferramentas avançadas. E não há nenhuma ferramenta mais avançada do que Lisp. Ou, em outras palavras: A resposta é sim, se seus problemas são difíceis. Não o contrário.

Respondeu 15/09/2008 em 16:02
fonte usuário

votos
54

Um dos principais usos para Lisp é em Inteligência Artificial. Um amigo meu na faculdade levou um graduado curso de AI e para o seu projeto principal, ele escreveu uma " Lights Out " solver em Lisp. Várias versões do seu programa utilizado ligeiramente diferentes rotinas e testes AI em 40 ou mais computadores produziu alguns resultados bastante puro (eu gostaria que fosse em linha em algum lugar para me ligar, mas eu não acho que isso é).

Dois semestres atrás eu costumava Scheme (a linguagem baseada em Lisp) para escrever um programa interativo que simula Abbott e Costello "Quem está ligada primeiro" rotina. Entrada do usuário foi comparado com algumas estruturas de dados muito complicadas (semelhante a mapas em outras línguas, mas muito mais flexível) para escolher o que uma resposta apropriada seria. Eu também escrevi uma rotina para resolver um 3x3 enigma da corrediça (um algoritmo que pode ser facilmente estendido para puzzles slides maiores).

Em resumo, aprendendo Lisp (ou esquema) não pode produzir muitas aplicações práticas para além AI, mas é uma experiência de aprendizagem extremamente valiosos, como muitos outros declarou. Programação em uma linguagem funcional como Lisp também irá ajudá-lo a pensar de forma recursiva (se você já teve problemas com recursividade em outros idiomas, esta poderia ser uma grande ajuda).

Respondeu 07/08/2008 em 15:22
fonte usuário

votos
52

Em resposta a @lassevk :

texto alternativo

Respondeu 16/09/2008 em 07:44
fonte usuário

votos
41

sintaxe complicada ??

A sintaxe para lisp é incrivelmente simples .

Assassino aplicativo escrito em lisp: emacs . Lisp lhe permitirá estender emacs à vontade para fazer quase qualquer coisa que você pode pensar que um editor pode fazer.

Mas , você só deve aprender lisp se você quiser , e você nunca pode ter de usar no trabalho que nunca, mas ainda é incrível.

Além disso, gostaria de acrescentar: mesmo se você encontrar lugares onde lisp vai fazer sentido, você provavelmente não vai convencer ninguém de que ele deve ser usado mais de Java, C ++, C #, Python, Ruby, etc.

Respondeu 07/08/2008 em 14:56
fonte usuário

votos
23

Eu não posso responder a partir da experiência em primeira mão, mas você deve ler o que Paul Graham escreveu em Lisp . Quanto à parte "killer-app", leia batendo as médias .

Respondeu 07/08/2008 em 15:00
fonte usuário

votos
16

I programado em Lisp profissionalmente há cerca de um ano, e é definitivamente vale a pena aprender. Você terá oportunidade única para remover a redundância do seu código, por ser capaz de substituir todo o código clichê com funções sempre que possível, e macros que não. Você também será capaz de acessar uma flexibilidade sem precedentes 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 Lisp realmente brilha. programadores vôo da linha aérea populares são escritos em Lisp, e também há um monte de CAD / CAM em Lisp.

Respondeu 12/08/2008 em 14:10
fonte usuário

votos
8

Lisp é muito útil para a criação de pequenos DSLs. Eu tenho uma cópia do Lisp em uma caixa em execução no trabalho e eu escrevi pequenos DSLs para interrogar bases de dados do SQL Server e gerar camadas de dados etc em C #. Todo o meu código de placa de caldeira está agora escrito em Lisp macros que a saída para C #. Eu gerar HTML, XML, todos os tipos de coisas com ele. Enquanto eu gostaria de poder usar Lisp para a codificação de todos os dias, Lisp pode trazer benefícios práticos.

Respondeu 26/08/2008 em 11:48
fonte usuário

votos
8

Se você gosta de programação você deve aprender Lisp para a pura alegria dela. XKCD expressa perfeitamente o esclarecimento intelectual que se segue. Aprender Lisp é para o programador que é meditação para o monge budista (e eu quis dizer isso sem qualquer conotação blasfema).

Respondeu 26/08/2008 em 10:51
fonte usuário

votos
5

Qualquer linguagem parece muito mais difícil quando não se usam as convenções de recuo comuns de um idioma. Quando alguém segue-os de Lisp, vê-se como ele expressa uma estrutura de sintaxe-árvore muito facilmente (note que este não está certo porque a pré-visualização encontra-se um pouco; o r devem estar alinhados com os fns no argumento quicksort recursivo):

(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))))))
Respondeu 12/08/2008 em 14:03
fonte usuário

votos
4

"Lisp vale a pena aprender para a experiência de iluminação profunda que você terá quando você finalmente vê-lo; que a experiência fará de você um programador melhor para o resto de seus dias, mesmo se você nunca realmente usar-se um monte Lisp."

--Eric S. Raymond, "Como se tornar um Hacker"

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

Respondeu 06/08/2011 em 23:06
fonte usuário

votos
4

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

Um dos mitos mais comuns repetido cerca de Lisp é que é "morto". Embora seja verdade que Lisp comum não é tão amplamente utilizado como, por exemplo, Visual Basic ou Java, parece estranho para descrever uma linguagem que continua a ser utilizado para o desenvolvimento de novos e que continua a atrair novos usuários como "morto". Alguns recentes histórias de sucesso Lisp incluem Viaweb de Paul Graham, que se tornou Yahoo loja quando o Yahoo comprou a sua empresa; O sistema da ITA Software preços passagens aéreas e compras, QPX, usada pelo vendedor de bilhetes on-line Orbitz e outros; jogo da Naughty Dog para a PlayStation 2, Jak e Daxter, que é em grande parte escrito em um dialeto Lisp de domínio específico Naughty Dog inventou chamado GOAL, cujo compilador é em si escrito em Lisp comum; e o Roomba, o limpador autónoma robótico vácuo, cujo software é gravada em L, um subconjunto para baixo compatível de Lisp comum. Talvez ainda mais revelador é o crescimento do site Common-Lisp.net, que hospeda projetos Lisp Comum de código aberto, e o número de grupos de usuários Lisp locais que surgiram nos últimos dois anos.

Respondeu 02/04/2010 em 04:40
fonte usuário

votos
4

Aprender LISP / Scheme pode não lhe dar qualquer aumento espaço de aplicação, mas vai ajudá-lo a ter uma melhor noção de programação funcional, suas regras e suas exceções.

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

Respondeu 27/11/2008 em 06:34
fonte usuário

votos
4

Descobri que aprender uma nova língua, sempre influencia o seu estilo de programação em idiomas que você já conhece. Para mim, sempre me fez pensar em maneiras diferentes de resolver um problema na minha língua primária, que é Java. Eu acho que, em geral, só alarga o seu horizonte em termos de programação.

Respondeu 12/08/2008 em 15:51
fonte usuário

votos
3

do Gimp Script-Fu é lipsish. Isso é um aplicativo photoshop-killer.

Respondeu 02/10/2008 em 16:56
fonte usuário

votos
3

Tomei uma "classe lisp" na faculdade de volta na década de oitenta. Apesar grokking todos os conceitos apresentados na classe, eu fui deixado sem qualquer apreço por aquilo que faz lisp grande. Eu tenho medo que muitas pessoas olham para lisp como apenas uma outra linguagem de programação, que é o que o curso na faculdade fez por mim há muitos anos. Se você vê alguém reclamando sobre sintaxe Lisp (ou falta dela), há uma boa chance de que eles são uma daquelas pessoas que não conseguiram captar a grandeza de lisp. Eu era uma dessas pessoas por um tempo muito longo.

Não foi até duas décadas mais tarde, quando eu reacendeu meu interesse em Lisp, que começou a "pegar" o que faz lisp interessante - pelo menos para mim. Se você conseguir aprender lisp sem ter sua mente soprado por encerramentos e macros Lisp, você provavelmente perdeu o ponto.

Respondeu 30/08/2008 em 23:47
fonte usuário

votos
3

Lisp Aprender vai colocar Javascript sob uma luz completamente diferente! Lisp realmente força você a compreender tanto recursão e todo o "funciona como primeira classe objetos" -paradigm. Veja Crockfords excelente artigo sobre Esquema vs Javascript . Javascript é talvez a língua mais importante em torno de hoje, então compreendê-lo melhor é imensamente útil!

Respondeu 20/08/2008 em 10:58
fonte usuário

votos
3

Se você tem que se perguntar se você deve aprender lisp, você provavelmente não precisa.

Respondeu 12/08/2008 em 16:21
fonte usuário

votos
3

Ok, eu poderia ser estranho, mas eu realmente não gosto de ensaios de Paul Graham que muito e em Lisp é um livro que vai realmente difícil se você não tem alguma compreensão do Lisp comum já. Em vez disso, eu diria que ir para o Siebel Practical Common Lisp . Quanto a "assassinas-apps", Common Lisp parece encontrar o seu lugar em lojas de nicho, como ITA , por isso, enquanto não houver um aplicativo sinônimo de CL a maneira Rails é para Ruby Há lugares na indústria que usá-lo se você fizer um pouco de escavação.

Respondeu 07/08/2008 em 15:12
fonte usuário

votos
3

Concordo que Lisp é um desses idiomas que você nunca pode usar em um estabelecimento comercial. Mas mesmo se você não consegue, aprendendo ela vai definitivamente expandir sua compreensão de programação como um todo. Por exemplo, eu aprendi Prolog na faculdade e enquanto eu nunca usei depois, eu me deu uma maior compreensão de muitos conceitos de programação e (às vezes) uma maior valorização para as línguas que eu uso.

Mas se você está indo para aprender ... por todos os meios, leia On Lisp

Respondeu 07/08/2008 em 15:01
fonte usuário

votos
2

Lisp pode ser usado em qualquer lugar que você usa programação tradicional. Não é que diferente, é apenas mais poderoso. Escrevendo uma aplicação web? você pode fazê-lo em Lisp, escrevendo uma aplicação desktop? você pode fazê-lo em Lisp, seja qual for, você provavelmente pode fazê-lo em Lisp, ou Python, ou qualquer outra programação genérica (existem algumas línguas que são adequados para apenas uma tarefa).

O maior obstáculo será, provavelmente, a aceitação de seu chefe, seus colegas ou seus clientes. Isso é algo que você terá que trabalhar com eles. Escolhendo uma solução pragmática como Clojure que podem alavancar a atual base instalada da infra-estrutura Java, a partir do JVM para as bibliotecas, pode ajudá-lo. Além disso, se você tem um programa Java, você pode fazer uma arquitetura de plug-in e escrever Clojure plug-ins para ele e acabar escrevendo metade seu código em Clojure.

Respondeu 26/11/2008 em 15:41
fonte usuário

votos
2

Você poderia usar Clojure hoje para escrever testes e scripts em cima da máquina virtual Java. Embora existam outras linguagens Lisp implementadas na JVM, acho Clojure faz o melhor trabalho de integração com Java.

Há momentos em que a linguagem Java em si fica no caminho de escrever testes para o código Java (incluindo "programação comercial tradicional"). (Eu não quero dizer que como uma acusação de Java - outras línguas sofrem do mesmo problema - mas é um fato Desde o tópico, não Java, não vou elaborar Por favor, sinta-se livre para iniciar um novo tópico se.. alguém quer discutir o assunto.) Clojure elimina muitos desses obstáculos.

Respondeu 15/09/2008 em 16:16
fonte usuário

votos
2

Killer app? Franz Inc. tem uma longa lista de histórias de sucesso , mas esta lista inclui apenas os usuários de AllegroCL ... Há provavelmente outros. O meu favorito é a história sobre a Naughty Dog , desde que eu era um grande fã dos jogos Bater Bandicoot.

Para aprender Common Lisp, eu recomendo Practical Common Lisp . Ele tem uma abordagem hands-on que, pelo menos para mim tornou mais fácil do que outros livros que eu olhei.

Respondeu 26/08/2008 em 11:03
fonte usuário

votos
2

Para adicionar outras respostas:

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

Respondeu 26/08/2008 em 10:53
fonte usuário

votos
2

sintaxe complicada? A beleza do lisp é que ele tem 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 que aumenta a sua capacidade de codificação para pensar e usar funções como apenas um outro tipo de dados. Isto irá melhorar a partir da maneira como você o código em um imperativo e / ou orientada a objeto linguagem porque vai permitir que você seja mais mentalmente flexível com a forma como o código é estruturado.

Respondeu 07/08/2008 em 15:01
fonte usuário

votos
1

Não uma razão, mas (trivial) AutoCAD tem LISP e DCL suporte de tempo de execução. É uma maneira conveniente para 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 cortá-la.

Muitas das funções do AutoCAD são realmente rotinas LISP.

Respondeu 25/09/2008 em 00:26
fonte usuário

votos
1

Este é um tema que eu mesmo já ponderou por um tempo, mas eu realmente não chegar a uma decisão, como o tempo usual é o principal problema ...;)

E desde que eu não posso encontrar esses links sofar Neste post eu adicioná-los para o interesse público:

Sucesso e fracasso história: ceceio no JPL

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

Comparação e análise de se usar Lisp em vez de Java: Lisp como uma alternativa para Java

Respondeu 20/08/2008 em 12:21
fonte usuário

votos
0

killer app? O motor de busca de voos pela ITA Software é um deles.

Quanto ao "porquê", ele muito provavelmente vai fazer você um programador melhor e é extremnely improvável para torná-lo um pior. Pode, no entanto, fazer sua preferência dialetos lisp para outras línguas.

Respondeu 09/12/2008 em 11:42
fonte usuário

votos
0

Não estou dizendo que este é um killer app, mas parece que ele poderia ser legal http://code.google.com/p/plop/

Respondeu 29/11/2008 em 05:04
fonte usuário

votos
0

Sintaxe é irrelevante, legibilidade não é!

Respondeu 12/08/2008 em 12:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more