Haskell E Lisp vs. Haskell OU Lisp [fechado]

40

Atualmente, codifico com C, C ++ e Python. Eu estou querendo pegar uma linguagem de programação funcional, e agora estou inclinado para Haskell. Eu não quero começar uma guerra "Haskell vs Lisp" aqui; o que eu quero saber é isto: se eu aprender Haskell principalmente por exposição à programação funcional, que benefícios, se algum, eu ganho com o aprendizado futuro de Lisp?

    
por Zeke 13.11.2010 / 18:33
fonte

7 respostas

58
Sugiro aprender ambos, Haskell primeiro, depois Common Lisp. Minha experiência com Haskell foi que a tipagem estática parecia ser um aborrecimento restritivo no início, mas uma vez que me acostumei, notei que a maioria dos meus erros de tipo tinha erros de lógica escondidos atrás deles. Quando você chegar a este ponto, e o próximo marco, que é aprender a pensar em tipos e definir seus próprios tipos como meio de expressar sua solução, você estará pronto para o Common Lisp.

Com o Common Lisp, você pode adicionar mônadas, curry e tudo o que você gostou do Haskell, mas também obter várias heranças, como Frank Shearar mencionou, e funções genéricas com vários dispatch e um avançado sistema de manipulação de exceções.

Então, por que não aprender primeiro o Common Lisp? Vindo de uma experiência procedimental e OOP, minha experiência tem sido que eu realmente não entendi programação funcional até ter que usá-la exclusivamente. Uma vez que a programação funcional é confortável, você pode adicionar o restante das ferramentas que o Common Lisp disponibiliza e usar qualquer ferramenta que seja melhor para a tarefa em questão.

    
por 13.11.2010 / 20:43
fonte
31

E por favor.

Haskell te ensina o mais puro de FP, até onde eu sei, pelo menos, assim como o Smalltalk ensina o mais puro de OO. (Eu menciono isso não para sugerir que OO e FP não podem se casar, mas porque ambos os idiomas são linguagens "gem" - uma ideia central levada a extremos).

Lisp é realmente uma família de línguas, então eu vou falar sobre o Common Lisp porque esse é o membro particular da família que eu uso.

Lisp ainda terá muito o que ensinar:

  • É multiparadigm, de modo que dsimcha aponta mostrará como integrar o FP com outros paradigmas.
  • Lisp ensinará a você que "código-é-dados, dados-é-código", por exemplo, através de suas macros.
  • O CLOS é uma marca muito interessante de OO, com várias heranças que funcionam e funções genéricas.
por 13.11.2010 / 19:05
fonte
11

O Learning Lisp mais tarde permitirá que você personalize o Emacs, que, indiscutivelmente, é o editor de texto mais avançado disponível. Você não pode fazer isso em Haskell.

    
por 13.11.2010 / 19:42
fonte
11

Haskell e Lisp são dois animais totalmente diferentes.

Haskell é uma espécie de "programação funcional pura em uma torre de marfim"

Lisp é tipo "código-é-dados / dados-é-código / constrói suas próprias linguagens". Você pode manipular seu código da maneira que puder imaginar.

Eles são muito diferentes. Ambos compartilham o aspecto de "programação funcional", mas isso é realmente um pequeno ponto em comum em comparação com suas diferenças. Basta experimentá-los e você verá como eles são diferentes!

    
por 10.09.2011 / 20:35
fonte
7
O principal benefício que vejo ao aprender o Lisp é aprender a integrar o FP em uma linguagem multiparadigmática orientada para o mundo real, em vez de apenas aprendê-lo no contexto de uma linguagem acadêmica que enfatiza a pureza.

    
por 13.11.2010 / 18:49
fonte
5

Eu também venho de um background em C / C ++ / Python e já experimentei o FP algumas vezes nos últimos anos. Inicialmente eu olhei para Haskell e não pude fazer a cabeça ou cauda dele, então tentei Ocaml, mas não fui muito mais longe com isso. Finalmente eu comecei a ouvir coisas boas sobre o Scala, tentei, e achei que me servia muito bem (eu também tinha feito um pouco de Java no passado), a ponto de que após um ano de tanto em Scala (e despachando 161 Projeto Euler problemas com ele), Haskell parece fazer muito mais sentido. Na verdade, eu apenas pedi alguns livros sobre Haskell e quero dar outra chance, embora isso seja em grande parte motivado pela existência de Scalaz.

Então eu encontrei usando uma linguagem multi-paradigmática (ou seja, Scala, mas Lisp provavelmente caberia também na conta) um bom caminho para o FP. Mas se você estiver feliz mergulhando em Haskell (eu não estava), vá em frente.

    
por 14.11.2010 / 01:43
fonte
2

Eu originalmente veio de um background em C / C ++ / Ruby e usei conceitos de FP em Ruby sempre que pude. Estado meio que magoou meu cérebro. Um de meus amigos me ligou um dia, e ele me pediu para escrever algo em Haskell (meu primeiro trabalho - e espero que não durasse - Haskell!). Eu aprendi rapidamente a linguagem e joguei algo que funcionou. Não foi bonito nem nada, mas funcionou.

Eu tirei uma folga do mês de Haskell porque eu não tinha nada para usá-lo. Mas quando decidi que precisava escrever meu próprio software de blog, usei o Haskell ( link ). O Haskell é muito legal porque você pode dividir um problema em partes e implementar essas partes de maneira diferente com base na entrada. Haskell também lida extremamente bem com o boxe inteligente de valores. Existem tantas ferramentas para trabalhar com essas caixas que você simplesmente esquece que elas existem.

Minha experiência com o lisp (Scheme) foi completamente negativa. Não apenas a linguagem carecia dessas ferramentas inteligentes e simples, mas também era perigosamente frouxa como Ruby ou JavaScript. Foi uma experiência horrível e não oferece nada de novo além do Ruby ou Python.

O C ++ não consegue segurar o Haskell, fora do gerenciamento de memória. Haskell é tão rápido (se não mais rápido), significativamente mais conciso e muito mais seguro. Mas a segurança de Haskell nunca atrapalha.

TL; TR Haskell é uma lufada de ar fresco, e Lisp é um Ruby um pouco mais funcional.

    
por 21.04.2015 / 19:17
fonte