Next: type avec des Up: types Previous: type avec pointeurs

type récursif

On peut aussi utiliser, sans grande différence conceptuelle, un type récursif avec des mutables :


type color   = Blanc | Noir;;
type image   = Color of color | Node of feuille
and  feuille = {mutable fils : image list};;
Et le triangle devient :

let rec triangle=Node {fils=[Color Blanc; triangle; Color Noir; 
triangle]};;
Il est absolument nécessaire d'utiliser des mutables pour pouvoir modifier une image, sinon la plupart des algorithmes ne seraient pas implémentables, faute de pouvoir construire une image progressivement. En effet, pour l'image du triangle par exemple, pour instancier la variable, il faut conna^tre ses fils, et comme elle fait partie de ses fils, il faut l'avoir déjà définie pour instancier ses fils ! (voir les algorithmes)

Ce type est particulièrement intéressant pour qui veut lui ajouter des caractéristiques par la suite, il est alors très simple d'ajouter des champs, ce qui a été fait pour la compression fractale.

Un de ces champs peut d'ailleurs servir à marquer les variables déjà rencontrées, ce qui permettrait de gagner un ordre dans la plupart des algorithmes.


fdurand@clipper.ens.fr, fleuret@clipper.ens.fr
Thu Jun 9 18:32:25 MET DST 1994