Pergunta

É possível forçar F# a se comportar como uma pura linguagem funcional como Haskell?Talvez usando algum diretivas de compilador?

PS:desde que eu venho de uma C/C++ fundo, eu quero me forçar a aprender programação funcional sem aprender Haskell :)

Foi útil?

Solução

Você não pode forçar este comportamento em F#, mas como Brian disse a disciplina é o seu melhor amigo.E. g.não use mutable, for ou while loops, ref palavras-chave, etc.Também vara puramente imutável estruturas de dados (discriminados união, lista, tupla, mapa, etc.).Se você precisa fazer IO em algum ponto, o arquiteto de seu programa de modo que eles são separados do seu puramente funcional código.

Não se esqueça de programação funcional é tudo sobre a limitação e de isolar os efeitos colaterais.

Outras dicas

Não desculpe. Você só tem que usar a disciplina.

Se você é como eu, provavelmente evitará as 'coisas boas' se não forçar a si mesmo a usar o Haskell em vez de F# e usar o Haskell da maneira mais idiomática possível. Usando tipos de dados algébricos em vez de objetos, aprender a amar a preguiça, abraçar a Mônada e mais são muito mais uma parte central de Haskell e, sem dúvida, alguns dos pontos mais refinados (na minha opinião) da programação funcional pura.

F# não tem uma curva de aprendizado tão íngreme de várias maneiras, mas parece que está aprendendo isso por diversão, então por que não se desafiar de qualquer maneira? Eu posso atestar que me mudar para F# depois de usar Haskell pode dar uma sensação muito melhor sobre como F# em geral deveria para ser usado de qualquer maneira.

Alimento para o pensamento.

Os aspectos puramente funcionais de Haskell são fundamentais para a linguagem. Você não pode simplesmente transplantar entre idiomas. Isso leva a grandes decisões de design - por exemplo, a natureza puramente funcional de Haskell levou à invenção da Mônada de IO. F# não possui uma "válvula de fuga" para computação com estado.

Além disso, aprender a programar em um idioma que suporta programação funcional, mas não a aplica absolutamente poderia realmente seja instrutivo. Muitas pessoas ficam confusas entre as decisões individuais de design de Haskell (por exemplo, a Mônada de IO, para chegar ao grande exemplo novamente) e como a programação funcional funciona em geral.

Em resumo: não, você não pode isso. Mas o que você pode fazer é assistir com muito cuidado e questionar tudo o que você faz que envolve a manutenção de operações de estado e sequenciamento para garantir que não haja uma abstração mais pura que você está perdendo.

Não. Atualmente, o F# Compiler não pode fazer essa verificação.

Por que não começar a escrever algum programa F# para aprender programação funcional? Conheço algumas pessoas que aprenderam ML/OCAML/F# primeiro e depois se mudaram para Haskell.

Então você terá uma melhor compreensão da pureza. (Se você realmente nunca tocou nenhuma linguagem de programação funcional antes, sua compreensão do puro funcional pode ser superficial.)

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