Skip to main content

Les fonctionnelles

La forme lambda : rappel et utilisation

(lambda (<p1> <p2> ... <pn>) <e>)
  • Nommage de λ\lambda-expressions : (define f (lambda (x y) (+ (* 10 x) y)))
  • Application de λ\lambda-expressions : mise en position fonctionnelle, stratégie applicative (par valeur)
  • Passage de λ\lambda-expressions en paramètres : juxtaposition
  • λ\lambda-expressions en retour de fonction : imbrication

Juxtaposition

On appelle rédex un terme de la forme (λx.u)v(\lambda x.u) v. On définit alors la bêta-réduction

(λx.u)vu[x:=v](\lambda x.u) v \rightarrow u[x:=v]

  • Soit le terme :(λx.xy)(λx.ux):(\lambda x.xy)(\lambda x.ux), on a la suite de réductions suivante : xy[x:=λx.ux](λx.ux)yux[x:=y]uyxy[x:=\lambda x.ux] \rightarrow (\lambda x.ux)y \rightarrow ux[x:=y] \rightarrow uy

  • Soit (λf.f0)(λx.(2x))(\lambda f.f0)(\lambda x.(*2 x)), on a la suite de réductions suivante : f0[f:=λx.(2x)](λx.(2x))0[2x](x:=0)(20)0f0[f:=\lambda x.(* 2x)]\rightarrow (\lambda x .(*2 x)) 0 \rightarrow [* 2 x](x:=0) \rightarrow (* 2 0) \rightarrow 0

  • En scheme : ((lambda(f)(f0))(lambda(x)(2x)))((lambda(f) (f 0)) (lambda (x) (* 2 x))), on a la suite de réduction suivante

    ((lambda(x) (* 2 x)) 0) -> (* 2 0) -> 0

Imbrication

  • Soit λx.(λy.xy)f\lambda x.(\lambda y.xy)f, on a λy.xy[x:=f]λy.fy\lambda y . xy [x:=f]\rightarrow \lambda y.fy
  • Soit (λx.(λy.xy)f)z(\lambda x.(\lambda y.xy)f)z, on a (λy.xy[x:=f])z(λy.fy)zfy[y:=z]fz(\lambda y.xy [x:=f])z \rightarrow (\lambda y.fy) z \rightarrow fy[y:=z] \rightarrow fz

Itération : la forme ̀map$

La forme mapmap prend une fonction ff et nn listes en arguments (n>0)(n>0)nn est l'arité de la fonction ff. Soit I1=(<a1><a2>...<an>)I1=(<a_1> <a_2> ... <a_n>) et I2=(<b1><b2>...<bn>)I2 = (<b_1> <b_2> ... <b_n>)

  • Cas d'une fonction unaire : (map<f><I1>)>((<f><a1>)(<f><a2>)...(<f><an>))(map <f> <I_1>) -> ((<f> <a_1>)(<f> <a_2>) ... (<f> <a_n>))
  • Cas d'une fonction nn-aire : (map<f><I1><I2>...)((<f><a1><b1>...)(<f><a2>...)...(<f><an>...))(map <f> <I_1> <I_2> ...) \rightarrow ((<f> <a_1> <b_1> ...)(<f> <a_2> ...)...(<f> <a_n> ...))

Forme andmap

Cette forme à la même signature que la forme mapmap. 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 foldlfoldl et foldrfoldr

Comme la forme mapmap, les formes foldfold appliquent une fonction aux éléments d'une ou plusieurs listes. Alors que mapmap combine les résultats obtenus dans une liste, les formes foldfold les combinent d'une façon déterminé par leur paramètre fonctionnel ff. Elles appliquent ff aux éléments des listes de gauche à droite ou bien de droite à gauche. L'argument initinit est utilisé pour terminer la combinaison récursive du résultat.

Application : la forme applyapply

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 f:A×BCf : A \times B \rightarrow C la curryfication lui associe la fonction suivante fc:A(BC)f^c : A \rightarrow (B \rightarrow C) qui a pour résultat une fonction allant de BB dans CC et telle que xA,f(x,y)=(fc(x))(y)\forall x \in A, f(x,y) = (f^c(x))(y)

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