In which scenarios should I consider a functional programming languages better suited to do a given task? Besides the so recently popular multicore problem of parallel programming.
Qualquer coisa que envolva criar uma sequência de elementos de dados derivados usando várias etapas de transformação.
Essencialmente, o "problema da planilha". Você tem alguns dados iniciais e um conjunto de cálculos linha por linha para aplicar a esses dados.
Nossas aplicações de produção fazem uma série de resumos estatísticos de dados; tudo isso é melhor abordado funcionalmente.
Uma coisa comum que fazemos é uma mesclagem de correspondência entre três conjuntos de dados monstruosos. Semelhante a uma junção SQL, mas não tão generalizada. Isto é seguido por um número de cálculos de dados derivados. Isso tudo é apenas transformações funcionais.
O aplicativo é escrito em Python, mas é escrito em um estilo funcional usando funções geradoras e tuplas nomeadas imutáveis. É uma composição de funções de nível inferior.
Aqui está um exemplo concreto de uma composição funcional.
for line in ( l.split(":") for l in ( l.strip() for l in someFile ) ):
print line[0], line[3]
Esta é uma maneira de a programação funcional influenciar linguagens como o Python.
Às vezes, esse tipo de coisa é escrito como:
cleaned = ( l.strip() for l in someFile )
split = ( l.split(":") for l in cleaned )
for line in split:
print line[0], line[3]
If I decided to switch to a functional programming language which do you consider are the biggest pitfalls that I will face? (Besides the paradigm change and the difficulty to evaluate performance due to lazy evaluation).
Objetos imutáveis são o obstáculo mais difícil.
Geralmente, você acaba calculando valores que criam novos objetos em vez de atualizar objetos existentes. A ideia de que é um atributo mutável de um objeto é um hábito mental difícil de quebrar.
Uma propriedade derivada ou função de método é uma abordagem melhor. Objetos com estado são um hábito difícil de quebrar.
With so many functional programming languages out there, how would you choose the one the better suit your needs?
Não importa a princípio. Escolha qualquer idioma para aprender. Uma vez que você saiba de algo, você está em posição de escolher outro para melhor atender às suas necessidades.
Eu li sobre Haskell apenas para entender as coisas que o Python não tem.