Introduction
Concepts et terminologie
- Écriture fonctionnelle : programmation par application 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, ce qui suppose l'absence d'effets de bord
- Programmation fonctionnelle pure : sans effets de bord, avec transparence référentielle
- Fonctions de première classe : type fonction, constantes fonctions, opérateurs sur les fonctions
- Typage dynamique : les valeurs sont typées au moment de l'exécution et non au moment de la compilation
- Références : ce sont les adresses des objets ; elles sont utilisées chaque fois que les contenus ne sont pas utiles (passages de paramètres, retours de fonctions)
- Ramasse-miettes (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 occurrences d'une variable par un terme pour réaliser le calcul des -termes. On note la substitution dans un -terme de toutes les occurrences libres d'une variable par un terme .
- Variables : si est une variable, alors si , et sinon
- Application : si , alors
- Abstraction : si , alors si et si 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 :
- La réduction du terme est la valeur de la fonction appliquée à l'argument
- est l'image de par la fonction
- L'image de est obtenue en substituant à dans
La normalisation
Un -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 directement inspirée du -calcul. Les parenthèses servent à délimiter les termes et les applications.
- Variables : , et constantes de types numérique, 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