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

Langage C++ Discussion :

Structure Inductive dont les constructeurs ne sont pas fixés


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut Structure Inductive dont les constructeurs ne sont pas fixés
    Bonjour,

    Voici mon problème : J'essaie de faire une structure de proposition générique. C'est à dire qu'une définition usuelle de la structure de Proposition (en notation Ocaml approximatif) pourrait-être

    Proposition =
    |Variable(Chaine de caractere)
    |AND(Proposition*Proposition)
    |OR(Proposition*Proposition)
    |FORALL(Variable * Proposition)
    ...

    Mon idée est de ne pas fixer les constructeurs :
    -Soit la liste des constructeurs possibles est passée en paramètre template à ma structure de Proposition (cas 1)
    -Soit la liste des constructeurs possibles est passée à l'éxecution (cas 2)

    Je ne sais pas encore si je veux être dans le cas 1 ou dans le cas 2 : le cas 1 apporte plus de sécurité au niveau du code et de meilleures performances (je ne sais pas encore si j'en ai besoin) mais ne permet pas à l'utilisateur de modifier les constructeurs.
    Mon idée pour le cas 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template<typename S1, typename ...SN>
    struct Prop
    {
       S1* cons;//NULL if not this constructor
       Prop<...SN> othercases;
    };
    Avec le constructeur X qui deviendrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct X
    {
       std::string name = "X";
       Type1 parameter1;
       Type2 parameter2;
       ...
       TypeN parameterN;
    };
    Il me semble que ceci fonctionnerait mais serait très désagréable à utiliser. Avez-vous une autre solution à proposer (ou une raison pour laquelle ceci ne marcherait pas ?)

    Pour le cas 2, je ne vois pas d'autre manière que de passer par des void* et de définir un int pour chacun des types utilisables... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    enum TypeID
    {
       INT, PROP, CHAR, STRING, VARIABLE, ...
    }
     
    struct Constructor
    {
        std::vector<TypeID> parameters;
        std::string name;
    };
     
    std::vector<Constructor> constructorList;
     
    struct Prop
    {
       Constructor c;
       void*data;//Qu'on interprète à partir des types de c
    };
    Y a t-il une meilleur implémentation à laquelle vous pensez ?

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    es-tu cantonné au C++ ?
    C'est typiquement un exercice des plus difficiles en C++, mais qui devient d'une trivialité incroyable en Python.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    es-tu cantonné au C++ ?
    A la fois oui et non : le langage que je maitrise le mieux est de loin le c++ et le projet devrait être assez conséquent (ceci n'est que le début d'un logiciel qui pourrait permettre d'entièrement choisir les connecteurs logique/quantificateurs et les règles de calcul des prédicats, puis de choisir un/des langages et une/des théories pour faire des preuves à partir des nouvelles règle de déduction, et enfin d'appliquer des algorithmes sur ces preuves). Je préfère donc avoir un langage robuste que je maitrise bien. Cependant, si un autre langage permettrait de faire tout cela de manière beaucoup plus simple, tout en étant adapté à des gros projets (ce qui n'est pas le cas de Python en "stand alone"), je suis preneur. Une autre solution serait de mélanger les langages, mais puisque ce morceaux de code fait partie du cœur du projet, il me semble qu'il devrait être dans le langage principal.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par NoIdea Voir le message
    adapté à des gros projets (ce qui n'est pas le cas de Python en "stand alone")
    Ha bon
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Puisque tu connais OCaml, tu pourrais l'utiliser, c'est un langage assez adapté aux arbres syntaxiques.
    à la fac, j'avais eu un cours de compilation, où nous avons écris en OCaml un compilateur pour une variante complexifiée de pascal.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Suite à vos réponses, je vais réfléchir et peut être décider d'un autre langage. Je voudrai tout de même savoir si il n'y a pas de meilleur implémentation en c++.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/08/2014, 11h10
  2. Réponses: 2
    Dernier message: 04/10/2007, 13h42
  3. Réponses: 1
    Dernier message: 04/12/2005, 18h02
  4. jointures dont les 2 membres sont des select
    Par rémi_tounul dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 26/04/2005, 14h56
  5. Les Langages ne sont pas tous les mêmes ......
    Par Max Payne dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/08/2003, 13h51

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