Programmation fonctionnelle - Introduction
Concepts et terminologie
- Ecriture fonctionnelle : programmation par applications de fonctions plutôt que par l'exécution de séquences d'instructions
- Transparence référentielle : chaque expression peut être remplacée par son résultat sans changer le comportement du programme - sans effets de bord
- Programmation fonctionnelle pure : sans effets de bords, avec transparence référentielle
- Fonctions de première classe : type fonction, constantes fonction, opérateurs sur les fonctions
- Type dynamique : les variables sont typées au moment de l'exécution et non au moment de la compilation
- Références : ce sont les adresse sur des objets, elles sont utilisées chaque fois que les contenus ne sont pas utiles (passages de paramètres, retours de fonctions)
- Garbage collector : gestion dynamique et automatique de la mémoire. L'utilisateur ne s'occupe pas de désallouer la mémoire
Le -calcul
- Variables :
- Applications : si et sont des -termes est aussi un -terme. On peut alors voir comme une fonction et comme un argument, étant alors l'image de par la fonction .
- Abstractions : si est une variable et un -terme alors est un -terme. Intuitivement, est la fonction qui à associe
La substitution
Cette opération permet de remplacer les occurences d'une variable par un terme pour réaliser le calcul des -termes. On note la substitution dans un lambda terme de toutes les occurrences d'une variable par un terme .
- Variables : si est une variable alors si et sinon
- Application : si alors si et sont des termes
- Abstraction : si alors si et n'est pas une variable libre de . Si est une variable libre de , on renomme avant de substituer. Si le résultat est .
La -réduction
On appelle rédex un terme de la forme . On définit alors la -réduction
a$
- La réduction du terme est la valeur de la fonction appliquée à la variable
- est límage de par la fonction
- L'image de est obtenue en substituant dans , par
La normalisation
Un lambda terme est dit en forme normale si aucune -réduction ne peut lui être appliquée, c'est à dire si ne contient aucun rédex.
Lien avec la syntaxe lisp
La syntaxe lisp est complètement basée sur le -calcul. Les parenthèses servent à délimiter les termes et les application
- Variables : , et constantes de types numériques, symbolique, fonctionnel etc
- Abstractions fonctionnelles : s'écrit
(lambda(x),y)
- Application : s'écrit
(u v)
Développement incrémental
Boucle Read Eval Print : REPL
- Read : Lecture d'une expression
- Eval : calcul (réduction) de l'expression
- Print : affichage du résultat (forme normale)
- Affichage du prompt
>
et retour à 1