Haskell AND Lisp vs. Haskell OU Lisp [fechado]


40

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?


11
E F # e Clojure.
CND

Respostas:


58

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.


6
Eu acho que você acertou em cheio - o que torna Haskell e Smalltalk tão úteis para o aprendizado é a pureza deles.
Frank Shearar

4
Concordo com a pureza que facilita o aprendizado de um idioma. Eu não conseguia entender a linguagem funcional em si com o LISP, porque tudo é possível na linguagem e tenho muita experiência em OO imperativa. Mas em Haskell, não existem conceitos que atrapalhem o aprendizado.
Eonil

11
É engraçado, tive a experiência oposta. Eu peguei os principais pontos da programação funcional através do Scheme, minha primeira língua. Ocasionalmente, invadir Haskell e inevitavelmente acho que preciso reaprender mais de 90% das coisas que sabia sempre que deixava Haskell por um tempo. Dito isto, Haskell é uma linguagem incrivelmente rica, com uma quantidade enorme de ensinamentos (com muita força.) Tipos Tipos Tipos Tipos! Siga os tipos!
Josh Infiesto

31

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:

  • É multiparadigma, então, como aponta dsimcha , mostrará como integrar o FP a outros paradigmas.
  • O Lisp ensinará que "código é dados, dados é código", por exemplo, através de suas macros.
  • CLOS é uma marca muito interessante de OO, com herança múltipla que funciona e funções genéricas.

11

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.


14
[Afia seus parênteses]
Inaimathi 13/11

6
Talvez alguém possa escrever um editor de texto para ele. Ouvi dizer que o sistema operacional Emacs não vem com um. . (I criança, eu sei que você pode obter o modo Viper :).
greyfade

14
Na verdade, existe um clone do Emacs chamado Yi, que usa Haskell exatamente da mesma maneira que o Emacs usa Lisp. De fato, comparado ao (GNU) Emacs, o Yi é ainda mais puro, porque seu kernel também é escrito em Haskell, enquanto os kernels do Emacs geralmente não costumam ser escritos em Lisp. O kernel do GNU Emacs é escrito em C, o JEmacs é escrito em Java, por exemplo.
Jörg W Mittag

2
@ Jörg, se é uma reimplementação parcial em vez de um clone completo do GNU Emacs ou XEmacs, não é a mesma coisa. É semelhante à comparação do Word ao Wordpad ou Notepad.

11
@ Thorbjørn Ravn Andersen: Sim, mas não é bem isso ruim. :)
greyfade

11

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!


+1: bom ponto. Conheço alguns Haskell e alguns Lisp. Embora eu não seja um especialista em nenhum deles, acho que você está certo de que eles são muito diferentes. No Haskell, você não tem a ideia de usar dados como código. No Lisp, você não possui correspondência de padrões (AFAIK). Provavelmente a lista (!) De diferenças é maior.
Giorgio

7

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.


5
Eu acho que você quer uma guerra "Haskell vs Lisp"!
quer

3
Haskell é uma linguagem acadêmica que enfatiza a pureza ... e muitas pessoas a usam no mundo real. Smalltalk também está naquele campo.
Frank Shearar

Muita gente usa Haskell no mundo real?
quer

11
@ Jon Harrop: Bem, eu uso Haskell no mundo real (e ele funciona muito bem para certas aplicações), talvez eu sou um dos poucos (?)
Giorgio

5

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.


Interessante que você tenha se aprofundado mais com o Scala do que com o OCaml. Por quê?
quer

@ Jon: Boa pergunta; difícil de dizer. Talvez eu simplesmente não estivesse pronto para "entrar" funcional na época. Talvez eu tenha encontrado um tutorial do Scala no nível certo. Talvez a linhagem C / C ++ / Java da Scala a tenha tornado um pouco menos estranha. Dado que qualquer aposta racional hoje em dia seria em F #, em vez de Scala, provavelmente revisitarei o domínio OCaml em algum momento, embora desde que eu tenha me interessado nessas coisas apenas pela pura alegria de entrar em uma "mentalidade de programação" diferente do meu C ++ durante o dia, tenho uma inclinação perversa para tentar novamente Haskell novamente em seguida.
timday 27/12/10

Alisar abordagem movendo :)
Eonil

2

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.