IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Qu'est-ce donc que Extlib Enum ?


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Par défaut Qu'est-ce donc que Extlib Enum ?
    Bonjour,

    je viens de découvrir la librairie Extlib, (après avoir codé moi-même une partie de ses fonctions dont j'avais besoin ... bon exercice pour débuter).

    Je voudrais savoir si quelqu'un peut me dire ce qu'est Enum, et à quoi cela sert.

    Merci d'avance !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    C'est une "énumération". Tu peux penser ça comme une liste d'éléments, mais l'implémentation est beaucoup plus générique (... et compliquée).

    Cette structure a été pensée pour être en quelque sorte la "langue commune" des structures de données les plus courantes : au lieu d'implémenter Array.filter, DynArray.filter, etc., on implémente Array.to_enum, DynArray.to_enum, et un Enum.filter.

    Plus généralement, si tu as seulement besoin "d'énumération" et sans contraintes algorithmiques particulières (comme les listes qui permettent de récupérer la queue en O(1), ou les tableaux qui ont un accès à une case arbitraire), par exemple pour juste effectuer une action sur tous les éléments à la suite, tu peux utiliser Enum. En quelque sorte c'est une structure "neutre".

    Son implémentation est assez sophistiquée parce qu'elle est faite pour pouvoir "communiquer" avec les autres structures de données de la manière la plus efficace possible (c'est à dire pouvoir faire des conversions dans les deux sens rapidement, pas comme Array.of_list qui est linéaire). En particulier elle utilise des méthodes "paresseuses" pour reporter le travail inutile.
    Tu n'as pas à te soucier de ça tant que tu utilises Enum "normalement". Si un jour tu as des besoins très spécifiques de performance tu pourras toujours t'y plonger, mais en attendant je te le déconseille : utilise Enum comme une énumération, les fonctions de conversion sans gêne, et voilà.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Par défaut
    Merci Bluestorm c'est grace à toi que j'ai découvert ExtLib qui va me rendre de grands services je ense, tu en parlais .

    Ceci étant, je ne suis pas sûr d'avoir bien compris... tu aurais un petit exemple sous la main ?


    ma recherche sur Google / code search n'a rien donné.

  4. #4
    Membre Expert
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Par défaut
    C'est passionnément inintéressant.
    Ceci étant, je ne suis pas sûr d'avoir bien compris... tu aurais un petit exemple sous la main ?
    En gros, si j'ai bien lu bluestorm, ça fait une alpha conversion, en OCaml on le ferait avec un let:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let module Enum = DynArray in ... Enum.filter ...

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    Euh, non. C'est des fonctions de conversion, comme Array.of_list / Array.to_list.

    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let ton_enum = Dynarray.enum ton_dinarray in
    Enum.filter_map ... ton_enum (* par exemple *)

    james-ml : tu peux lire la doc

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Par défaut
    Citation Envoyé par bluestorm Voir le message
    james-ml : tu peux lire la doc
    oui c'est ce que j'avais fait, mais le mot énum m'a fait peur. Je comprends que cela s'utilise comme des listes, mais avec des conversions possibles vers des tableaux, et optimisées de surcroit (paresseuses ?).

    Je creuse le sujet car j'ai actuellement un bout de code à écrire ou j'utilise des listes de 2 façons :
    -avec des maps, des fold et autres dans la plupart des cas
    -parfois besoin d'un accès séquentiel
    J'ai implémenté ça sur des listes, et j'ai sagement remis l'optimisatoin de la partie à accès direct à plus tard.
    Enum pourrait-il m'aider ?

    Citation Envoyé par SpiceGuid Voir le message
    C'est passionnément inintéressant.

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 21h08
  2. « Mais qu'est-ce donc que HTML5 ? »
    Par Hinault Romaric dans le forum Balisage (X)HTML et validation W3C
    Réponses: 102
    Dernier message: 06/02/2014, 12h30
  3. Qu'est ce donc que le String ^ ?
    Par Guiiil dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2009, 12h00
  4. [D7][DBase 4] Qu'est-ce donc que la propriété Table1.DataBaseName ?
    Par alainvh dans le forum Bases de données
    Réponses: 10
    Dernier message: 19/08/2007, 20h09
  5. DBExpress est plus lent que BDE?
    Par palassou dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo