|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
Étudiant Inscription : juillet 2011 Messages : 15 ![]() |
Bonjour,
je debute en ocaml et comence a m'interesser aux classes, pour un petit projet personnel je dois utiliser les map, mais les tutoriel concernes semblent rares car je n'en ai trouve aucun a ce jour... J'ai bien trouve la page de renseignement: http://caml.inria.fr/pub/docs/manual.../Map.Make.html mais aucun exemples de code... si quelqu'un pouvait me donner un debut de piste sur l'instenciation de map de (type -> classe), merci par avance |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Yankel ScialomIngénieur en systèmes embarqués Inscription : juin 2004 Messages : 1 031 ![]() |
Bonjour,
cherches-tu à utiliser le module Map ou bien à en coder un ? Ensuite, ne confonds-tu pas les termes module et classe ? Ce n'est pas la même chose (Map est un module). Cdlt,
__________________
gasp in touch -- Yankel Scialom |
|
|
00
|
|
|
#3 |
Étudiant Inscription : juillet 2011 Messages : 15 ![]() |
merci de ta reponse,
je souhaite l'utiliser, avec un binding sur un type predefini par moi (un int) associe a une classe. A moins que les maps caml n'aient rien a voir avec les maps c++ et autres ? |
|
|
00
|
|
|
#4 |
Étudiant Inscription : juillet 2011 Messages : 15 ![]() |
help ?
|
|
|
01
|
|
|
#5 | |||||
|
Membre Expert
![]() Yankel ScialomIngénieur en systèmes embarqués Inscription : juin 2004 Messages : 1 031 ![]() |
Ce genre de messages ne sont pas vraiment appréciés. C'est avec plaisir que je t'apporte mon aide, mais quand je le souhaite. Il faut que je mange aussi.
Citation:
Comme tu le vois à l'adresse http://caml.inria.fr/pub/docs/manual.../Map.Make.html, Map.Make est un functor. Il s'agit finalement d'une fonction prenant en argument un module et retournant un (autre) module. Un module est un ensemble de types, de fonctions et de constantes, il diffèrent donc légèrement de la notion d'objet (sache qu'OCaml gère aussi l'objet). Donc, Map.Make a comme signature functor (Ord : OrderedType) -> S with type key = Ord.t. Démêlons un peu cela :
Il faut maintenant s'intéresser aux signatures de OrderedType et S : http://caml.inria.fr/pub/docs/manual-ocaml/libref/Map.OrderedType.html http://caml.inria.fr/pub/docs/manual-ocaml/libref/Map.S.html Maintenant que l'on sait tout ça, il faut procéder par étape. Tu veux créer un module qui mappe des données par des entiers. Il faut donc dans un premier temps définir le module de type OrderedType comme étant des entiers ordonnés naturellement ( ... < -2 < -1 < 0 < 1 < 2 < ...). Dans un second temps, il faut fabriquer un module Mapintgrâce à Map.Make et le module précédent. Enfin, il sera possible d'utiliser la map. Le code qui suit est approximatif, je n'ai pas d'OCaml sous la main.
Note qu'une fois que tu utilises une map (créer grâce à Mapint.empty par exemple), le type de données qu'elle contient est défini et ne peu plus être modifié. Si tu veux plus d'informations n'hésites pas à demander. Cdlt,
__________________
gasp in touch -- Yankel Scialom |
|||||
|
|
00
|
|
|
#6 |
![]() ![]() Damien GuichardInscription : juin 2007 Messages : 1 518 ![]() |
Une application qui à un int associerait une fonction qui renvoie un nouvel object
À priori ça ressemble à de la désérialisation, dans ce cas tu devrais regarder du côté du module Marshal. D'autre part Map.Make est pour tout comparable et n'est pas particulièrement optimisé pour le type int. Tu pourrais regarder du côté des arbres Patricia. Et encore les arbres Patricia c'est pour des entiers distribués de façon arbitraire. Car si tes entiers sont denses sur un intervalle [0,n] un simple tableau fait très bien l'affaire Enfin, si tu es débutant en OCaml et que tu es familier du C++ :
__________________
Du même auteur: le cours OCaml, le dernier article publié, le projet, le blog dvp et le jeu vidéo. Avant de poser une question je lis les règles du forum. |
|
00
|
|
|
#7 |
Étudiant Inscription : juillet 2011 Messages : 15 ![]() |
Merci beaucoup a vous deux! vous m'avez bien debroussailer les idees.
Je cherche en fait a creer un simple serveur irc ocaml grace a unix.cma, tout fonctionne correctement mais grace a des listes d'unix.file_descr (moche, pas de buffer par client, toussa) je pensait donc qu'une map avec un type: type fd -> Unix.file_descr et une classe class client : object val mutable buffer_ : string val mutable init_ : bool val mutable rdy_ : bool method bufferize : string -> unit method get_buffer : string method get_state : bool end ferait l'affaire. Cela coniendrait-il ? sinon je pense pouvoir me debrouiller avec un tuple. sur ce, je m'adonne a la lecture de tes liens prgasp77! Ps: je m'excuse du up, j'etais legerement enerve PPs: clavier qwerty |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com