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 :

récursion entre un module et une fonction ?


Sujet :

Caml

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut récursion entre un module et une fonction ?
    Bonjour,


    Je veux implémenter une fonction "compare" qui algorithmiquement a besoin de regarder des ensembles dont les éléments ont le type t pour pouvoir comparer deux éléments de type t. Pour être bien propre, j'aurai voulu tout coder avec des ensembles (module d'arrivée de Set.Make), mais pour cela, il faudrait pouvoir définir en même temps monn module S et la fonction compare, et je vois pas trop comment c'est possible. Pour l'instant, j'ai une solution qui n'est pas très satisfaisante: à partir de deux éléments de type type, je construis des listes dans ma fonction compare, et je définis ensuite le module Ensemble.

    Est-ce qu'on peut faire mieux ?

  2. #2
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par rhnk17 Voir le message
    Je veux implémenter une fonction "compare" qui algorithmiquement a besoin de regarder des ensembles dont les éléments ont le type t pour pouvoir comparer deux éléments de type t.
    http://caml.inria.fr/pub/docs/manual...021.html#toc75

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation:
    Envoyé par rhnk17:
    Je veux implémenter une fonction "compare" qui algorithmiquement a besoin de regarder des ensembles dont les éléments ont le type t pour pouvoir comparer deux éléments de type t.
    http://caml.inria.fr/pub/docs/manual...021.html#toc75
    merci !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    en fait, ça marche pas car je suis obligé de construire des ensembles
    dans le module A pour définir la fonction compare...

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Tu peux essayer d'implémenter les ensembles par une table de hachage : au lieu d'un 'a Set.t, tu utilises une ('a, unit) Hashtbl.t : pour ajouter un élément dans l'ensemble tu le mets comme clé avec la valeur (), et tu peux utiliser Hashtbl.mem pour tester l'appartenance.

    Ça permet d'utiliser une fonction de hachage (générique par défaut, mais tu peux en écrire une toi-même en utilisant l'interface fonctorielle) au lieu d'une fonction de comparaison, ce qui est pratique si tu ne peux pas encore utiliser compare.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    bon, finalement, problème contourné dans mon cas:
    J'avais des ensembles de termes (d'arbres), et pour comparer les termes je teste (entre autres si l'un est sous-arbre de l'autre, et je dois aussi fournir une fonction sub qui rend l'ensemble des sous-arbres. Pour démêler ça:
    - j'ai en plus défini une fonction is_sub qui rend un booléen et qui est appelée par compare- je défini la fonction sub ensuite
    - j'étends le module d'ensembles ensuite (trick vue sur sur ce forum et dans une doc ocaml
    ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    module A : TYPEA
    struct...
      is_ sub
      compare
      module S = Set.Make(...)
      sub
    end
     
    module TS = functor ( T : TYPEA) ->
    struct
     
      include T.S
      (mes autres fonctions)
    end
    Ocaml se débrouille bien pour voir que les types de T.S et de TS sont les mêmes...

    Merci aussi pour le coup des fonctions de hachage, j'essayerai une autre fois...

Discussions similaires

  1. [AC-2007] Problème d'exécution entre requète et module pour une fonction quartile
    Par Fcnaatao dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 28/02/2012, 09h50
  2. Récupérer une référence vers le module contenant une fonction
    Par ProgVal dans le forum Général Python
    Réponses: 2
    Dernier message: 13/05/2010, 12h54
  3. Différence entre une fonction shared et un module
    Par amirad dans le forum VB.NET
    Réponses: 1
    Dernier message: 21/11/2009, 17h45
  4. conflit entre include javascript et une fonction javascript
    Par mitch46000 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/04/2007, 15h28
  5. PerlDoc sur une fonction d'un module
    Par lesouriciergris dans le forum Modules
    Réponses: 2
    Dernier message: 13/03/2003, 20h50

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