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, pour
((lambda (f) (f 0)) (lambda (x) (* 2 x))), on a la suite de réductions suivante :((lambda (x) (* 2 x)) 0) ; -> (* 2 0) -> 0
Imbrication
- Soit : on a
- Soit : on a
Itération : la forme map
La forme map prend une fonction f et listes en arguments (), où
est l'arité de la fonction f. Soient l1 = (a1 a2 ... ak) et l2 = (b1 b2 ... bk) :
- cas d'une fonction unaire :
(map f l1)renvoie((f a1) (f a2) ... (f ak)); - cas d'une fonction -aire :
(map f l1 l2 ...)renvoie((f a1 b1 ...) (f a2 b2 ...) ... (f ak bk ...)).
Forme andmap
Cette forme a la même signature que la forme map. Elle applique la fonction aux
éléments de la liste dans l'ordre. Elle s'arrête et renvoie #f au premier résultat faux ; sinon, le résultat est celui de la dernière application (pas de mise en liste).