From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA09933; Wed, 14 Aug 2002 10:40:31 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id KAA09925 for ; Wed, 14 Aug 2002 10:40:30 +0200 (MET DST) Received: from shiva.jussieu.fr (shiva.jussieu.fr [134.157.0.129]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id g7E8eTn14320 for ; Wed, 14 Aug 2002 10:40:29 +0200 (MET DST) Received: from ibm3.cicrp.jussieu.fr (ibm3.cicrp.jussieu.fr [134.157.15.3]) by shiva.jussieu.fr (8.12.5/jtpda-5.4) with ESMTP id g7E8eTjR065311 for ; Wed, 14 Aug 2002 10:40:29 +0200 (CEST) Received: from ibm1.cicrp.jussieu.fr (ibm1.cicrp.jussieu.fr [134.157.15.1]) by ibm3.cicrp.jussieu.fr (8.8.8/jtpda/mob-V8) with ESMTP id KAA19030 for ; Wed, 14 Aug 2002 10:38:41 +0200 Received: from localhost (fernande@localhost) by ibm1.cicrp.jussieu.fr (8.8.8/jtpda/mob-v8) with SMTP id KAA07182 for ; Wed, 14 Aug 2002 10:37:25 +0200 Date: Wed, 14 Aug 2002 10:37:25 +0200 (DST) From: Diego Olivier Fernandez Pons To: caml-list@inria.fr Subject: [Caml-list] Simuler les vues avec des variantes polymorphes Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=iso-8859-1 Content-Transfer-Encoding: QUOTED-PRINTABLE X-Antivirus: scanned by sophie at shiva.jussieu.fr Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Bonjour, Il y a eu plusieurs messages sur les vues dans la liste Caml r=E9cemment, alors j'ai cod=E9 une impl=E9mentation des arbres de recherche pond=E9r=E9s (Hinze 2001) simulant le m=E9canisme des vues =E0 l'aide des variantes polymorphes - c'est la seule structure de donn=E9e que je connaisse o=F9 cela apporte r=E9ellement une simplification du code - En gros, un arbre de recherche pond=E9r=E9 est une structure hybride entre les arbres de recherche binaires et les semi-tas type 'a prioritySQ =3D=20 [ `Empty=20 | `Single of 'a * int=20 | `Pennant of `a * int * `a tree * `a ] type 'a heapView =3D [ `Empty | `Single of 'a * int | `Link of 'a prioritySQ * 'a prioritySQ ] Les fonctions utilisent l'une ou l'autre repr=E9sentation selon leur convenance en appelant si n=E9cessaire les fonctions de transformations entre vues avant le filtrage de motifs.=20 let insert x p =3D function psq -> match heap_view psq with | `Empty -> ... | `Single _ -> ... | `Link _ -> ... Seulement je ne peux par faire ceci let insert x p =3D function | `Empty -> ... | `Single _ -> ... | `Link _ -> ... | other -> insert x p (to_heap_view other) car le typeur n'accepte pas le m=E9lange des types (je peux toujours mettre tous les constructeurs dans un seul type il est vrai mais ce n'est pas tr=E8s propre)=20 Est-il possible de concevoir des variantes polymorphes o=F9 le typeur accepterait des unions de types ? (en ce sens qu'au lieu de typer une fonction par les g=E9n=E9rateurs i.e. "tout type contenant Empty" ... il la type par union de tous les types d=E9clar=E9s qui contiennent Empty) Diego Olivier ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners