A programação funcional está fortemente relacionada à matemática?


21

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?


1
Esta questão está corretamente identificada com mathematica ou deveria ser matemática?

Aqui e aqui estão duas perguntas muito semelhantes. Eu não acho que você precise ter uma 'base sólida' em matemática, mas você precisa de um entendimento bastante bom dos seus princípios de algum ponto de vista. A geometria me ajuda mais no mapeamento de memória, mas raramente penso mais nos números. A matemática é (pode ser) MUITO útil.
Garet Claborn 21/03

Respostas:


28

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.


Boas palavras, +1.
Mudassir 21/03/11

4
quando você começa a aprender SQL, a programação declarativa não é tão difícil.

7

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.


Eu posso entender funções matemáticas melhor do que a estranha sintaxe de haskell e outros. Você tem algum link que relacione as etapas matemáticas à sintaxe de qualquer linguagem funcional.
RainDoctor 25/01

Essa resposta é precisa. O FP começará a fazer todo o sentido quando você perceber (e internalizar) que está escrevendo funções matemáticas e não procedimentos passo a passo. A maioria das pessoas aprende a programação processual primeiro e essa bagagem é enorme. Eu acho que "funções" em linguagens procedurais devem ser chamadas de "procedimentos".
Kakaji 06/02

2

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.


1

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


10
Você está apenas exemplificando uma função anônima, não o fechamento. Wikiedpia: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.

1

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.