La programmation fonctionnelle est-elle fortement liée aux mathématiques?


21

La programmation fonctionnelle est-elle si liée aux mathématiques parce qu'une grande partie de la programmation fonctionnelle est représentée par des notions mathématiques? Est-ce un MUST d'avoir une base solide de mathématiques pour apprendre et comprendre la programmation fonctionnelle pour un programmeur avec une formation impérative?


1
Cette question est-elle correctement étiquetée avec mathématique ou doit-elle être mathématique?

Ici et voici deux questions très similaires. Je ne pense pas que vous devez avoir une «base solide» en mathématiques, mais vous avez besoin d'une assez bonne compréhension de ses principes d'un certain point de vue. La géométrie m'aide le plus avec le mappage de la mémoire, mais je pense rarement aux nombres comme tels. Les mathématiques sont (peuvent être) TRÈS utiles.
Garet Claborn

Réponses:


28

Toute la programmation est liée aux mathématiques. En effet, de nombreuses universités placent encore leurs programmes informatiques sous la responsabilité du département de mathématiques.

Quant à l'apprentissage de la programmation fonctionnelle, vous n'avez pas besoin d'avoir une base solide en mathématiques pour l'apprendre. J'ai maintenant appris trois langages fonctionnels différents avec une compétence raisonnable (Haskell, Erlang, Clojure) et mes propres compétences en mathématiques sont extrêmement faibles. La communauté de Haskell peut, en effet, devenir un peu ennuyeuse dans sa façon de parler des choses, mais Erlang et Clojure sont tous deux des langages de programmation fonctionnels très pragmatiques qui ne sont pas si difficiles à comprendre parce que les informations du tutoriel sont écrites, apparemment, pour les programmeurs, pas les geeks de maths hard-core. Cela étant dit, malgré mon handicap en maths , je l'ai fait ramasser Haskell, il est donc impossible.

La vraie difficulté que j'ai trouvée dans le choix des langages de programmation déclaratifs en général (dont la fonctionnalité est un sous-ensemble) est de renoncer à cette envie de contrôler; pour dire à l'ordinateur quoi faire. Il faut un certain temps pour s'y habituer.


Jolis mots, +1.
Mudassir

4
quand vous apprenez bien la programmation déclarative SQL n'est pas si difficile.

7

Oui. Essentiellement, un programme fonctionnel est un tas de déclarations comme ça:

// 1_ et 2_ sont des "arguments factices" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ etc ...

x = f ()

y = g (x)

z = h (x, h2 (y))

etc...

Vous écrivez ce que le programme est censé faire sous forme d'équations définissant de nouvelles valeurs (remarque: pas des variables) en fonction de valeurs précédemment définies. Vous définissez également les fonctions en tant que relations. C'est vraiment assez similaire à la façon dont les théorèmes mathématiques sont écrits.


Je peux mieux comprendre les fonctions mathématiques que l'étrange synatx de haskell et d'autres. Avez-vous un lien qui relie les étapes mathématiques à la syntaxe de tout langage fonctionnel.
RainDoctor

Cette réponse est précise. FP commencera à prendre tout son sens une fois que vous réaliserez (et intériorisez) que vous écrivez des fonctions mathématiques et non des procédures pas à pas. La plupart des gens apprennent d'abord la programmation procédurale et ce bagage est énorme. Je pense que les "fonctions" dans les langages procéduraux devraient être appelées "procédures".
Kakaji

2

IMO Mathematica, en tant qu'exemple de langage dans lequel vous pouvez utiliser la programmation fonctionnelle, ne nécessite pas de solides connaissances en mathématiques. En fait, je ne pense pas avoir rencontré quoi que ce soit comme la programmation fonctionnelle pendant ma formation de base en mathématiques. J'ai commencé la programmation Mathematica en utilisant le style C et découvert la programmation fonctionnelle seulement des années plus tard. Je ne pense pas que les constructions de programmation fonctionnels de base comme Map, Apply, NestList, etc nécessitent aucun arrière - plan de mathématiques du tout.


1

pas vraiment. la programmation fonctionnelle n'est qu'une méthodologie, mais elle avait sa base dans le calcul lambda et des trucs comme ça.

Les fermetures sont une (petite) tentative pour introduire des concepts de programmation fonctionnelle dans des langages procéduraux. au lieu de for(int i =0 ; i < num; i++) doStuff(arr[i]);, vous pouvez plutôt supposer que les éléments du tableau peuvent intrinsèquement avoir "des choses qui leur sont faites" doncarr.each do |el| doStuff(el) end


10
Vous ne faites qu'illustrer une fonction anonyme, pas la fermeture. 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

La réponse courte est: oui, parce que tout ce qui a un certain degré de formalisation (comme les langages de programmation) est fortement lié aux mathématiques, à des degrés divers de mathématiques.

Mais, l'utilisation d'un langage de programmation ne nécessite pas strictement la familiarité avec les mathématiques, par exemple les fondements théoriques des langages. Vous n'avez pas besoin de savoir ce qu'est une langue sans contexte et quelles sont les lois et les propriétés d'une telle langue pour en utiliser une. De même, vous n'avez pas besoin d'être germaniste ou romain pour parler allemand ou français.

La notation "mathématique" n'est pas une propriété commune des langages fonctionnels. Scala et tous les langages basés sur Lisp ont des syntaxes très différentes par rapport à Haskell.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.