Pergunta

Eu já ouvi muito sobre linguagens de programação funcional e estou disposto a aprender. Acho que vai ser principalmente por diversão, no entanto, espero que ele irá melhorar minhas habilidades de programação.

Eu tenho principalmente C # /. NET fundo, por isso a minha primeira escolha é aprender F # (por causa do .NET e familiaridade com o Visual Studio). Por por outro lado, eu me pergunto se F # tem características como Lisp macros ou Haskell funções de ordem superior.

Você poderia comparar F #, Haskell e Lisp? Qual deles será o idioma de sua escolha?

Foi útil?

Solução

F # é minha língua de escolha, mas eu fortemente recomendo aprender todos eles. Eles são todos muito diferente e interessante em seu próprio direito. Aqui está um rápido durante fim de cada um (talvez com uma ligeira # viés F), você pode facilmente encontrar mais informações por googling:

F # - é uma linguagem que faz com que seja fácil de programa no estilo funcional, permite copiar facilmente os objetos em vez de mutação eles. Ela também lhe dá tipos de dados interessantes, como tuplas e tipos de dados algébricos, construções de linguagem úteis, tais como padrão de correspondência e compreensões lista. Ele também tem OO e características imperativas e bom acesso a bibliotecas, desde que você pode usar qualquer componente .NET framework.

Haskell - é uma linguagem funcional pura e preguiçoso, fazendo um animal raro ou mesmo único. Isso significa que não há efeitos colaterais em tudo, a menos que sejam acompanhados por uma mônada. Haskel também tem tuplas, dados algébricos e correspondência de padrão.

Lisp - enquanto F # e Haskell são de tipagem estática, lisp é digitado dinamicamente. Ele tem uma sintaxe distinta, que usa muita parênteses e fornece um recurso de macro interessante que lhe permite fazer transformações para o próprio programa e estender a sintaxe.

Outras dicas

Eu tive a mesma pergunta uma vez

Desde então, tenho feito alguma programação em F #. Agora estou muito feliz que eu fiz, uma vez que é realmente útil para entender LINQ em C # e que passou a ser a minha experiência também. (Eu quase nunca usar foreach em C # agora desde que eu aprendi F #)

Eu aprendi a F # um monte de coisas sobre evalution preguiçosos, listas e sequências, tudo o que você poderia escolher qualquer idioma para com um bom suporte para as listas, tuplas, e assim por diante (como qualquer linguagem funcional eu acho), mas se você escolhe F #, tudo isso vai ser muito útil em C # também. Talvez você já sabe todas essas coisas e usá-lo bem, mas no caso de você não, escolher F #.

Eu comecei aqui : um vídeo tutorial muito bom, muito impressionante e muito inspirando tutor.

Atualmente estou assistindo estes vídeo de no Channel 9 sobre os conceitos básicos de programação funcional. É explicado usando Haskell, mas os princípios se aplicam a todos os idiomas. Devo dizer que é muito informativo e fácil de entender.

Esta é uma questão muito subjetiva.

A minha opinião é que Scheme (uma variante Lisp) e ler SICP é a coisa certa. Você vai aprender muito.

Mas para fins práticos e se você é um desenvolvedor .NET então talvez F # é melhor.

Eu não sei F #, mas eu gosto de jogar com ele algumas vezes. Minha língua é Clojure que é muito funcional e trabalha no CLR também, mas a versão JVM é a versão principal.

É overs-lhe um monte de coisas que você deseja. A principal diffrence para F # é que Clojure é dynamicly digitado e tem realmente boa maneira alça concurency (um dos melhores que eu diria).

BTW. Você sabia que o F # foi feita porque Haskell era difícil de obter em execução no CLR? (Isso não é toda a história, claro, mas a sua parte dela)

Ninguém realmente respondeu a esta pergunta específica: "Eu me pergunto se F # tem características como Lisp macros ou Haskell funções de ordem superior"

F # não oferece macros. Além disso, ele não oferece tipos de maior kinded (que é o que eu pensei que você estava fazendo em primeiro lugar).

F # faz funções de oferta de ordem superior em que você pode facilmente escrever uma função que recebe uma função e retorna uma função. Na verdade, C # (ou realmente qualquer linguagem .NET) pode fazer isso como delegado Func faz parte do framework .NET.

Por que escolher? Saiba tanto Lisp e Haskell em seu próprio país. Nenhum ponto em aprender F # em seu próprio tempo embora. Se você precisar dele para o trabalho, você vai aprender no trabalho;)

EDIT: O cara estava olhando para a linguagem de aprender para se divertir. Bem, Lisp e Haskell são bons candidatos desde diversão é tudo o que eles estão indo para ser usado para (empregos não pagos lá). Ele "poder" (embora improvável) têm oportunidade de usar F # no trabalho (ele está na loja MS), então por que aprender alguma coisa no tempo livre, quando ele pode ser pago aprendê-la no trabalho.

Eu aprendi todos eles para um grau diffeent, e aconselharia começando com Scheme (um dialeto Lisp) - simplesmente porque é mais fácil de aprender. Haskell e F # são de tipagem estática, que é uma grande vantagem para os projectos da vida real, mas IMHO eles têm um pouco "demais" sintaxe e não são tão fáceis de pegar como Scheme.

Há um agradável implementação Scheme for .NET - IronScheme. Você pode dar uma olhada no meu artigo " Jogando com IronScheme " para ver Se você gosta dele.

Se compararmos este três línguas eu vou recomendar Haskell. É mais prático do que LISP Eu acho que (porque é tipo de sistema) e mais poderoso e inteligente do que F #. Tanto quanto você sabe F # é uma porta NET do OCaml e até certo ponto não é ideoligally limpar como Haskell é ou como OCaml é. Eu vou recomendar-lhe estudar Haskell ou OCaml saber como inconvinient F # é.

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