Les fonctionnelles
La forme lambda : rappel et utilisation
(lambda (<p1> <p2> ... <pn>) <e>)
- Nommage de -expressions :
(define f (lambda (x y) (+ (* 10 x) y)))
- Application de -expressions : mise en position fonctionnelle, stratégie applicative (par valeur)
- Passage de -expressions en paramètres : juxtaposition
- -expressions en retour de fonction : imbrication
Juxtaposition
On appelle rédex un terme de la forme . On définit alors la bêta-réduction
-
Soit le terme , on a la suite de réductions suivante :
-
Soit , on a la suite de réductions suivante :
-
En scheme : , on a la suite de réduction suivante
((lambda(x) (* 2 x)) 0) -> (* 2 0) -> 0
Imbrication
- Soit , on a
- Soit , on a
Itération : la forme ̀map$
La forme prend une fonction et listes en arguments où est l'arité de la fonction . Soit et
- Cas d'une fonction unaire :
- Cas d'une fonction -aire :
Forme andmap
Cette forme à la même signature que la forme . Elle applique la fonction aux éléments de la liste dans l'ordre. LE résultat est celui de la dernière application, pas de mise en liste. S'arrête au premier résultat faux.
Forme ormap
Comme la forme andmap mais renvoie le premier vrai
Itérations générales : formes et
Comme la forme , les formes appliquent une fonction aux éléments d'une ou plusieurs listes. Alors que combine les résultats obtenus dans une liste, les formes les combinent d'une façon déterminé par leur paramètre fonctionnel . Elles appliquent aux éléments des listes de gauche à droite ou bien de droite à gauche. L'argument est utilisé pour terminer la combinaison récursive du résultat.
Application : la forme
Cette fonction réalise l'application d'une fonction à une liste d'arguments. Ce mécanisme est utile pour l'écriture de fonctions à nombre d'arguments variable.
(apply <f><I>)=(<f> <e1> <e2> ... <en>)
avec <I>=(<e1> <e2> ... <en>)
Fonctions en retour de fonctions
curryfication
La fonction curry curryfie son argument. Soit une fonction la curryfication lui associe la fonction suivante qui a pour résultat une fonction allant de dans et telle que
Notion de fermeture
- L'environnement lexical d'une fonction est l'environnement dans lequel elle est définie
- Une fermeture est la représentation d'une fonction sous forme d'un couple associant l'environnement lexical et le code de la fonction
- En scheme les fonctions sont représentées par des fermetures pour conserver leur environnement de définition contenant des références éventuelles (ce n'est pas le cas par exemple du langage emacs-lisp)
- Les fermetures peuvent être utiliées pour représenter des états, par modification de l'environnement