Précédent Suivant

  Identités remarquables

 

 
Le sous-ensemble de Scheme enseigné est dit « purement fonctionnel », il s'apparente au monde merveilleux des mathématiques où les valeurs ne changent pas et où ce qui est vrai reste vrai jusqu'à la fin des temps (ces deux propriétés ne sont pas vraies dans la quasi-majorité des langages de programmation). Du coup, puisque tout est composable avec tout en Scheme (seules les définitions ne sont pas librement composables pour des raisons de portée), il est possible d'énoncer des « identités remarquables » comme celle-ci:
 
(if a (f b) (f g)) º (f (if a b g))

Dans les deux cas, on calcule la condition a puis on applique f sur la valeur de b ou g suivant la valeur de vérité obtenue à partir de a. L'identité obtenue permet de mettre f en facteur.
 
Inversement, on peut également écrire:
 

(if a (b d) (g d)) º ((if a b gd)

Cette identité ne met pas en facteur la fonction mais son unique argument. Notez qu'ici la transformation syntaxique, correspondant à la factorisation, est de même nature que la précédente et conduit à calculer la fonction (la valeur de b ou g) qui sera appliquée à l'argument (la valeur de d). Que la fonction à invoquer soit le résultat d'une alternative plutôt que d'une variable illustre bien la régularité du langage.



 

Précédent Suivant