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?
math
scala
functional-programming
prasonscala
la source
la source
Réponses:
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.
la source
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.
la source
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.la source
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
la source
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.
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.
la source