A programação funcional está tão relacionada à matemática porque grande parte da programação funcional é retratada com noções matemáticas? É necessário ter uma base sólida de matemática para aprender e entender a programação funcional de um programador com experiência imperativa?
math
scala
functional-programming
prasonscala
fonte
fonte
Respostas:
Toda a programação está relacionada à matemática. De fato, muitas universidades ainda colocam seus programas de ciência da computação sob a alçada do departamento de matemática.
Quanto ao aprendizado de programação funcional, você não precisa ter uma base sólida em matemática para aprendê-lo. Eu aprendi três idiomas funcionais diferentes agora com proficiência razoável (Haskell, Erlang, Clojure) e minhas próprias habilidades em matemática são extremamente fracas. A comunidade de Haskell pode, de fato, ser um pouco irritante em sua maneira focada em matemática, mas Erlang e Clojure são linguagens de programação funcional muito pragmáticas que não são difíceis de entender porque as informações do tutorial são escritas, aparentemente, para programadores, não para geeks da matemática. Dito isto, apesar da minha deficiência em matemática I fez pegar Haskell, por isso não é impossível.
A verdadeira dificuldade que encontrei em pegar linguagens de programação declarativas em geral (das quais funcional é um subconjunto) é desistir desse desejo de estar no controle; para dizer ao computador o que fazer. Leva algum tempo para se acostumar.
fonte
Sim. Essencialmente, um programa funcional é um monte de declarações como essa:
// 1_ e 2_ são "argumentos fictícios" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ etc ...
x = f ()
y = g (x)
z = h (x, h2 (y))
etc ...
Você está escrevendo o que o programa deve fazer em uma forma de equações que definem novos valores (nota: não variáveis) como funções de valores definidos anteriormente. Você também define as funções como relações. É realmente muito parecido com o modo como os teoremas matemáticos são escritos.
fonte
O IMO Mathematica, como um exemplo de uma linguagem na qual você pode usar a programação funcional, não requer uma sólida formação em matemática. Na verdade, acho que não encontrei nada parecido com programação funcional durante meus estudos básicos de matemática. Comecei a programação do Mathematica usando o estilo C e descobri a programação funcional apenas alguns anos depois. Eu não acho que as construções básicas de programação funcional como
Map
,Apply
,NestList
, etc requer qualquer fundo de matemática em tudo.fonte
Na verdade não. A programação funcional é apenas uma metodologia, mas teve como base o cálculo lambda e coisas assim.
Os fechamentos são uma (pequena) tentativa de introduzir conceitos de programação funcional em linguagens procedurais. em vez de
for(int i =0 ; i < num; i++) doStuff(arr[i]);
, você pode assumir que os elementos da matriz inerentemente podem ter "coisas feitas com eles" paraarr.each do |el| doStuff(el) end
fonte
The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.
A resposta curta é: Sim, porque tudo com um certo grau de formalização (como linguagens de programação) está fortemente relacionado à matemática, para diferentes graus de matemática.
Porém, o uso de uma linguagem de programação não exige estritamente familiaridade com a matemática, por exemplo, fundamentos teóricos das linguagens. Você não precisa saber o que é uma linguagem livre de contexto e quais leis e propriedades essa linguagem possui para usá-la. Da mesma forma, você não precisa ser um germânico ou romanista para falar alemão ou francês.
A notação "matemática" não é uma propriedade comum das linguagens funcionais. Scala e todas as linguagens baseadas em Lisp têm sintaxes muito diferentes em comparação com Haskell.
fonte