La superposition:
(define superposition
(lambda (dessinateur1 dessinateur2)
(lambda (transf)
(append (dessinateur1 transf) (dessinateur2 transf)))))
La superposition est effectuée très simplement en extrayant de chacun des deux dessinateurs la
liste des segments auxquels on aura appliqué la transformation reçue en paramètre par notre
dessinateur résultant et qu'on aura ensuite juxtaposés avec un append.
L'empilage:
(define pile
(lambda (prop dessinateur1 dessinateur2)
(lambda (transf)
(append
((translation 0 (- prop 1) (reduction 1 prop dessinateur1)) transf)
((translation 0 prop (reduction 1 (- 1 prop) dessinateur2)) transf)))))
On combine ici deux transformations de base. Pour chacun des deux dessinateurs reçus, on
réduit d'abord du facteur voulu (l'un étant le complément de l'autre) et il ne reste plus qu'à déplacer
(translation) les deux dessins à leur position finale. Comme on applique au passage à chaque
dessinateur les transformations que devra subir le dessinateur final, on obtient deux listes de
segments qu'il ne nous reste plus qu'à combiner et à remettre dans un lambda qui leur passera le
«transf» précité. On a d'ailleurs déjà utilisé cette technique pour la superposition.
La mise en côte-à-côte:
(define cote-a-cote
(lambda (prop dessinateur1 dessinateur2)
(lambda (transf)
(append
((translation (- prop 1) 0 (reduction prop 1 dessinateur1)) transf)
((translation prop 0 (reduction (- 1 prop) 1 dessinateur2)) transf)))))
La stratégie est ici calquée sur l'empilage. La fonction se comporte exactement comme la
précédente, mais selon l'autre axe. Il aurait toutefois été plus compliqué de vouloir mettre en commun
les opérations similaires. Il aurait fallu soit jouer avec une série de rotation (coûteux), soit ajouter
plusieurs paramètres spécifiques, tuant ainsi l'espoir d'une généralisation utile. Il eut aussi été
possible de déduire à partir des paramètres déjà existant laquelle des deux fonctions appelait une
fonction commune, mais il aurait alors fallu effectuer une lourde série d'opération mathématiques à
chaque itération, ce qui, somme toute, n'était pas intéressant.