La programmation fonctionnelle est un paradigme de programmation où la base de calcul est l'évaluation d'expressions. Certaines caractéristiques sont l'utilisation des fonctions d'ordre supérieur, de la transparence référentielle et l'évaluation paresseuse. Les avantages du style de programmation comprennent que les programmes sont faciles à lire, sont très fiables et peuvent être divisés en composants. Les inconvénients sont que des calculs peut être lent et le style et la syntaxe sont complètement différents des autres styles de programmation courants. Le style de programmation fonctionnelle est le plus souvent adopté par des universitaires que par des professionnels de l'informatique.
Comme son nom l'indique, les fonctions sont un élément fondamental de ce paradigme de programmation. Les fonctions peuvent être imbriquées dans d'autres fonctions, appelées fonctions d'ordre supérieur, et chaque fonction d'ordre supérieur peut être décomposé en blocs construire des fonctions qui sont faciles à comprendre et à déboguer. Voici quelques exemples de fonctions d'ordre supérieur sont la carte et le nid. La carte de fonction prend une fonction F et la liste des variables, par exemple (x, y, z) et donne le résultat dans une liste: la carte [F, (x, y, z)] = (F (x), F (y), F (z)). Nid prend la fonction F, la variable x, et le nombre d'itérations: Nest [f, x, 3] = F (f (f (x))).
Programmation fonctionnelle pure prend une entrée et une sortie retourne sans jamais changer d'état d'une variable. En d'autres termes, une fonction avec la même entrée donnera toujours les mêmes résultats quel que soit ce qui s'est passé précédemment dans le programme. C'est ce qu'on appelle la transparence référentielle. Depuis fonctions mathématiques sont référentiellement transparente, la programmation fonctionnelle est un outil intuitif de nombreux mathématiciens, des ingénieurs et des scientifiques.
La transparence référentielle de fonctions signifie que l'ordre d'évaluation de la fonction n'est pas important. Par conséquent fonctions doivent pas être évaluées avant que leurs résultats sont nécessaires, ce qui est appelé l'évaluation paresseuse. Ceci est en contraste complet avec la programmation impérative, où un programme commence avec la première commande et traverse la liste jusqu'à ce que la dernière commande. Saute d'évaluation paresseux sur les parties du programme qui ne suivent pas logiquement ou sont superflus, ce qui optimise automatiquement le programme et peut réduire le temps de calcul.
La programmation fonctionnelle a de nombreux avantages sur d'autres paradigmes de programmation. Fonctionne avec les entrées et les sorties claires sont faciles à lire et à comprendre. Une fois qu'une fonction est bien au point, il peut être utilisé de manière fiable dans d'autres applications. Machines multi cœurs peut être en mesure de calculer les fonctions qui sont évaluées indépendamment en parallèle, considérablement améliorer la performance des programmes.
Malheureusement, tous les programmes ne se prêtent pas au calcul parallèle, et le calcul des programmes fonctionnels peuvent être assez lent. Programmes fonctionnels s'appuient fortement sur la récursivité, ce qui est souvent moins efficace que l'utilisation de boucles d'itération des méthodes traditionnelles ou. En fait, la programmation fonctionnelle peut être très maladroite et difficile à apprendre car il ne ressemble pas à d'autres paradigmes les plus courantes telles que la programmation orientée objet.
Les universitaires ont tendance à favoriser la programmation fonctionnelle car elle fournit une manière claire et compréhensible pour programmer les problèmes complexes du monde réel. Certaines langues sont pures Haskell et Erlang. Mathematica est spécialisé en mathématiques symboliques, R est spécialisée dans les statistiques et J est spécialisé dans l'analyse financière. Langues Multiparadigm comme Scala et F # prend en charge la programmation fonctionnelle et d'autres styles de programmation.