Atualmente, eu codigo com C, C ++ e Python. Estou querendo aprender uma linguagem de programação funcional e, agora, estou me inclinando para Haskell. NÃO quero iniciar uma guerra "Haskell vs Lisp" aqui; o que eu quero saber é o seguinte: se eu aprender Haskell principalmente para exposição à programação funcional, que benefícios, se houver, obterei com o aprendizado posterior do Lisp?
40
Respostas:
Sugiro aprender as duas coisas, primeiro Haskell, depois Common Lisp. Minha experiência com Haskell foi que a digitação estática parecia inicialmente um aborrecimento restritivo, mas depois que me acostumei, notei que a maioria dos meus erros de tipo apresentava erros lógicos. Quando você chegar nesse ponto e no próximo marco, que é aprender a pensar em tipos e definir seus próprios tipos como um 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 gostou da Haskell, mas também obter várias heranças, como Frank Shearar mencionou, e funções genéricas com múltiplos despachos e um sistema avançado de tratamento de exceções.
Então, por que não apenas aprender Common Lisp primeiro? Vindo de um background processual e OOP, minha experiência foi que eu realmente não entendi programação funcional até precisar usá-la exclusivamente. Quando a programação funcional estiver confortável, você poderá adicionar o restante das ferramentas disponibilizadas pelo Common Lisp e usar a melhor ferramenta na tarefa em questão.
fonte
E por favor.
Haskell ensina o mais puro de FP, pelo que sei pelo menos, assim como Smalltalk ensina o mais puro de OO. (Menciono isso para não sugerir que OO e FP não possam se casar, mas porque esses dois idiomas são "gem" - uma idéia central levada ao extremo.)
O Lisp é realmente uma família de idiomas, então eu vou falar sobre o Common Lisp porque esse é o membro específico da família que eu uso.
O Lisp ainda terá muito a lhe ensinar:
fonte
Aprender o Lisp mais tarde permitirá que você personalize o Emacs, que sem dúvida é o editor de texto mais avançado disponível. Você não pode fazer isso em Haskell.
fonte
Haskell e Lisp são dois animais totalmente diferentes.
Haskell é uma espécie de "pura programação funcional em uma torre de marfim"
Lisp é uma espécie de "código-é-dados / dados-é-código / cria suas próprias construções de linguagem". Você pode manipular seu código da maneira que puder imaginar.
Eles são muito diferentes. Ambos compartilham o aspecto "programação funcional", mas esse é realmente um pequeno ponto comum comparado às diferenças. Basta experimentá-los e você verá como eles são diferentes!
fonte
O principal benefício que vejo ao aprender o Lisp é aprender a integrar FP em uma linguagem multiparadigmática orientada para o mundo real, em vez de apenas aprendê-la no contexto de uma linguagem acadêmica que enfatiza a pureza.
fonte
Eu também venho de um background em C / C ++ / Python e experimentei o FP algumas vezes nos últimos anos. Inicialmente, olhei para Haskell e não consegui entender o que estava acontecendo, tentei Ocaml, mas não fui muito longe com isso. Finalmente, comecei a ouvir coisas boas sobre o Scala, tentei e achei que me convinha muito bem (eu também havia feito um pouco de Java no passado), a tal ponto que depois de um ano de tanto brincar no Scala (e despachar 161) Problemas do Project Euler), Haskell parece fazer muito mais sentido. Na verdade, acabei de encomendar alguns livros sobre Haskell e quero tentar outra vez, embora isso seja amplamente motivado pela existência de Scalaz.
Então, descobri que usar uma linguagem multiparadigma (ou seja, Scala, mas o Lisp provavelmente também se encaixaria na conta) é um bom caminho para o FP. Mas se você está feliz em mergulhar em Haskell (eu não estava), vá em frente.
fonte
Vim originalmente de um background em C / C ++ / Ruby e usei conceitos de FP no Ruby sempre que podia. Estado meio que machucou meu cérebro. Um dos meus amigos me ligou um dia e ele me pediu para escrever algo em Haskell (meu primeiro - e espero que não seja o último - trabalho de Haskell!). Eu aprendi rapidamente o idioma e juntei algo que funcionou. Não era bonito nem nada, mas funcionou.
Fiz uma pausa de um mês em Haskell porque não tinha nada para usá-lo. Mas quando decidi que precisava escrever meu próprio software de blog, usei o Haskell ( https://symer.io ). Haskell é muito legal porque você pode dividir um problema em partes e implementá-las de maneira diferente com base na entrada. Haskell também lida com as falhas extremamente bem através do encaixotamento inteligente de valores. Existem tantas ferramentas para trabalhar com essas caixas que você simplesmente esquece que elas existem.
Minha experiência com lisp (Scheme) foi completamente negativa. A linguagem não apenas carecia dessas ferramentas simples e inteligentes, mas parecia tão perigosamente frouxa quanto Ruby ou JavaScript. Foi uma experiência horrível e não oferece nada de novo além de Ruby ou Python.
C ++ não pode acender uma vela para 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.
fonte