2010-11-18 5 views
6

J'ai un problème avec la création d'une collection contenant des éléments hétérogènes, en élément particulier sera structuré comme suit:Définition des jeux en OCaml

(a, 1), ((a, 1), 1)), ((a, 1), 1), 1) et ainsi de suite ....

puis-je le faire en utilisant le module Set of ocaml?

D'ailleurs y a-t-il aussi une fonction qui me permet de faire le produit cartésien entre les ensembles (aussi hétérogène)?

Répondre

8

Vous ne pouvez pas créer des ensembles d'éléments hétérogènes. Bien sûr, vous pouvez définir un type pour unifier les types si vous les connaissez à l'avance. Il semble que vous faites, et il peut être le type récursif défini par:

type ('a,'b) r = | L of 'a 
       | N of (('a,'b) r * 'b) 

Ainsi, vos exemples seraient construits comme,

N (L a,1) 
N (N (L a,1),1) 
N (N (N (L a,1),1),1) 

alors vous simplement construire le module Ordonné pour englober la comparaison fonction.

Dans le cas de la création du produit cartésien, il ne s'agirait pas d'éléments hétérogènes à ce stade, mais d'un tuple du type précédent. Cela nécessiterait un nouveau module Ordered pour gérer ces comparaisons.