Pergunta

Esta é a situação: Eu, principalmente, programar C # e ter escrito tipos nele que eu não quero perder. Ao mesmo tempo, eu gostaria de aprender programação funcional. A resposta óbvia, claro, é F #.

Mas para tudo além de C # Eu uso Emacs como um editor, e eu realmente gostaria de aprender Lisp também. (Saiba seus editores / idioma do IDE você sabe, é por isso que eu sei um pouco VB para escrever meus VS-macro está nele) E não é apenas emacs, Lisp é algo que eu realmente quero aprender.

Quanto a F #, eu poderia conviver com C #, sem qualquer problema de interoperabilidade, têm um grande GUI (WPF) e um monte de outras .NET guloseimas. Mas é, é claro, não tão maduro quanto Lisp.

Se sou realista que eu sei se eu quero para contrabandear uma linguagem funcional para a minha vida profissional tem que ser F #. Desde a aprendizagem de duas línguas todo parece um pouco demais, eu estava esperando que Lisp seria uma ótima maneira de aprender programação funcional, e se eu começar a F # Mais tarde, seria muito fácil ....

Isso é verdade? Ou são as duas línguas não é comparável em tudo?

Foi útil?

Solução

Lisp é uma grande família de línguas e implementações. Esquema por exemplo, é um dialeto Lisp com provavelmente mais de uma centena de implementações (cerca de dez deles levemente popular). Lisp comum é outro dialeto com cerca de dez implementações atualmente mantidos. Scheme e Common Lisp ambos têm normas escritas que as implementações tentar implementar.

F # é tanto uma linguagem e implementação. De Microsoft. Ele foi principalmente derivada de OCaml e pertence à família das línguas ML.

Lisp era uma língua muito cedo apoiar programação funcional (Lisp 1,5 na década de 60). Muitos dos primeiros experimentos com programação funcional foi feito em Lisp. Na década de 70 na comunidade Lisp houve um movimento para as raízes da programação funcional eo resultado foi Esquema . Em seguida, especialmente nos anos 80 e 90 do século passado novas linguagens funcionais apareceu (ML, Miranda, FP, SML, Haskell, Limpo, ...) que foram / são bastante diferentes dos dialetos habituais Lisp. Há ainda alguma herança, mas principalmente eles desenvolveram em direções diferentes (tipagem estática, tipo de inferência, sistemas de módulos, línguas lote, tipos de dados algébricos, avaliação preguiçosa, pureza, e mais). A comunidade Esquema ainda tem muitos contatos com a comunidade FP. Mas isso é na maior parte.

Existem algumas idéias básicas PF que podem ser aprendidas independente a partir de uma linguagem FP particular, mas geralmente F # é muito diferente da maioria dos dialetos Lisp. A outra característica, que F # suporta o .NET ecossistema (especialmente uma vez que é uma criação Microsoft) não está muito bem apoiado por dialetos Lisp.

Eu também não esperar muito beneficiar de saber um dialeto Lisp restrito como Emacs Lisp para aprender F #.

Outras dicas

Eu acho que é apenas uma pequena 'sobreposição' para o que você fez iria aprender através Lisp Comum contra F #. O ponto em comum é que eu acho mais ou menos

  • Programação com 'contras-listas' como um tipo de dados fundamental comum, às vezes escrita recursiva funções ao invés de laços (especialmente cauda-recursivo)
  • Alguns usos básicos de funções de ordem superior comum (por exemplo, 'mapa' - aplicar uma função para cada valor em uma lista)

Além de alguns dos que essência material funcional de programação, acho Common Lisp e F # são tão distantes um do outro como dois convencional (não-Haskell) línguas 'funcional' pode ser. Lisp comum é dinâmico; F # é estaticamente digitado. As formas sintácticas são completamente diferentes. Os tempos de execução são completamente diferentes. As bibliotecas são muito diferentes. Os sistemas de objetos são completamente diferentes.

Independentemente do que ordem você aprende-las, eu acho que depois de aprender um ainda haverá um pouco mais para aprender na outra (modulo a pequena sobreposição I descrito acima).

F # é mais comparável à família ML de línguas, tais como SML e CAML. A sintaxe e características são diferentes de Lisp.

Mas eu acho que aprender pelo menos uma língua funcional é muito importante do ponto de vista de ciência da computação. Ser capaz de pensar dessa forma é bom.

E, eu diria, a aprendizagem de uma linguagem mais puramente funcional antes de iniciar F # seria uma maneira de pegar bons hábitos de programação funcional, porque, se não o fizer, o seu # código F pode acabar sendo mais OO e menos funcional, porque é onde você está vindo.

A meu ver, há duas abordagens para a programação funcional de aprendizagem:

  1. Use uma linguagem funcional mais pura como Lisp ou Haskell que forçará -lo a sair de um processual mentalidade de imediato; ou

  2. Use uma linguagem funcional pragmática como F #, que também oferece mais familiar, mas menos funcional, construções para ajudar a facilitar o seu caminho para ele.

Em qualquer caso, você vai ter mais proveito da experiência de aprendizagem se você pode fazer algo útil com a língua. Parece que você tem motivação para Lisp (Emacs) e F # (interoperabilidade .NET), então eu seria dar uma olhada em ambos e ver o que capta a sua atenção.

Em última análise, não há mais valor em conceitos compreensão funcional de programação (funções de ordem superior, sem efeitos colaterais, recursão cauda, ??etc) do que qualquer um idioma. E uma vez que você aprender esses conceitos, será muito mais fácil de pegar novas linguagens e aplicar as técnicas em outros idiomas (como o cada vez mais funcional C #). Ao longo destas linhas, você pode estar interessado em programação funcional para o Real World.

Duas coisas importantes a considerar é:

  • LISP é digitado dinamicamente ao passo F # é digitado estaticamente.
  • LISP tem de macro embutido. F # não.

Embora ambos são muitas características comuns funcionais e compartilhar considerados, eles também são diferentes. Aprendizagem LISP vai certamente fazer-lhe uma melhor F # programador e vice-versa, mas ainda assim você teria que aprender as peculiaridades de ambos para ser capaz de ser prático em si.

Para ser capaz de interoperabilidade com .NET eu certamente escolher F #, mas por causa da beleza programação Gostaria de tentar LISP também.

Ambos são linguagens funcionais, mas sintaticamente eles são muito diferentes. Isso significa que um monte de conceitos será semelhante e você (como desenvolvedor processual) terá que fazer o mesmo alucinante para usar, mas eles são muito diferentes idiomas.

F # é um derivado de ML (o que é considerado, com todos os seus derivados, para ser uma linguagem impuro funcional) ao passo que Lisp é mais antigo e é considerado ser uma linguagem funcional "puro".

A pureza de uma linguagem funcional é um tema fascinante e eu recomendo que você leia Idioma Pureza e sujo e Funções Limpo para entender melhor o conceito:

Muitas pessoas falam sobre "pura" linguagens funcionais, onde "pura" parece ser um sinônimo de "bom". Há duas características comumente relacionado com a definição de um linguagem funcional pura:

  1. funções não podem ter efeitos colaterais
  2. uma função chamada com qualquer dado argumentos retornará sempre o mesmo valor.

Sou apenas novo para F #, mas eu estudei Lisp antes de F # e acredito que foi muito útil para contextualizar F # tanto no framework .NET e a gama de linguagens de programação.

eu vivamente recomendo assistir pelo menos os primeiros vídeos aqui:

http://groups.csail.mit. edu / mac / aulas / 6.001 / Abelson-sussman-palestras /

Estes te ensinar o básico do Lisp dentro da primeira hora. A série baseia-se em que o conhecimento e incute os princípios emocionantes que caem fora de lá.

A semântica de F # e Esquema são muito semelhantes com a excepção notável de tipagem forte.

Além disso, o Esquema é tão pequena, não para aprender!

Como uma linguagem de programação Lisp é muito especial em seu próprio direito no entanto, não é semelhante ao F # em tudo, exceto que ambos programação funcional apoio. Não muitas construções de linguagem transitar de Lisp para F #. Se você quer aprender lisp ir para ele. A idéia de programação funcional irá transitar simplesmente não a sintaxe. Lisp é realmente velhos, 50s atrasado. Muitas línguas foram influenciados por ele e há muito poucos dialetos.

Se o seu apenas à procura de uma linguagem funcional pura para aprender antes de F # eu sugiro Haskell. Haskell foi fortemente influenciado por ML e é um bom língua transição para F # F # desde é um derivado de ML. Você pode olhar para o código Haskell e ver padrões semelhantes em F # código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top