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 :

Typage d'expression : comment fait caml ? [FAQ]


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Typage d'expression : comment fait caml ?
    Bonjour,
    je débute avec la programmation fonctionnelle.
    Je voudrais comprendre comment OCaml fait pour déterminer le type de l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # let h x y z =(x y)(y z);;
    val h : (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'c = <fun>
    J'ai essayé de contruire l'arbre, mais sans succès.
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    la détermination se fait par inférence... en gros, on démarre avec tous les types alpha, beta, gamme, etc, et on propage des contraintes

    en pratique,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    let h x y z =(x y)(y z);;

    tu vois que h est une fonction avec trois arguments x y z, on aura donc un début de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x = alpha_x
    y = alpha_y
    z = alpha_z
    h = alpha_x -> alpha-y -> alpha_z -> alpha_resH
    on remarque que x est appliquée à y... donc x est une fonction prenant en argument y et renvoyant alpha_resX

    idem y est appliquée à z... donc z est une fonction prenant en argument y et renvoyant alpha_resY

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    y = alpha_z -> alpha_resY
    x = alpha_y -> alpha_resX = (alpha_z -> alpha_resY) -> alpha_resX
    z = alpha_z
    h = alpha_x -> alpha-y -> alpha_z -> alpha_resH 
      = ((alpha_z -> alpha_resY) -> alpha_resX) -> (alpha_z -> alpha_resY) ->  alpha_z -> alpha_resH
    on voit ensuite que x y est appliquée à y z, et le calcul est fini...
    donc on a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    alpha_resX = alpha_resY -> alpha_resH
    y = alpha_z -> alpha_resY
    x = alpha_y -> alpha_resX
      = (alpha_z -> alpha_resY) -> (alpha_resY -> alpha_resH)
    z = alpha_z
    h = alpha_x -> alpha-y -> alpha_z -> alpha_resH
      = ((alpha_z -> alpha_resY) -> alpha_resY -> alpha_resH) -> (alpha_z -> alpha_resY) ->  alpha_z -> alpha_resH
    on renomme dans l'ordre d'apparition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h = (('a -> 'b) -> 'b -> 'c) -> ('a -> 'b) -> 'a -> 'c


    si tu veux des liens :

    http://en.wikipedia.org/wiki/Type_inference
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Merci pour ton aide, j'ai enfin compris !!!

  4. #4
    Membre émérite
    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
    Points : 2 990
    Points
    2 990
    Par défaut
    En tant que programmeur fonctionnel il est toujours plus intéressant de questionner le pourquoi plutôt que le comment.
    En particulier ce qui t'aide à corriger tes programmes ce n'est pas comment il ne peut pas inférer un type correct mais pourquoi il ne peut pas.
    Et la réponse à cette question figure, en grande partie, dans la Partie II de mon tutoriel, où il faut chercher toutes les occureences des mots Règle d'inférence.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par SpiceGuid Voir le message
    En tant que programmeur fonctionnel il est toujours plus intéressant de questionner le pourquoi plutôt que le comment.
    En particulier ce qui t'aide à corriger tes programmes ce n'est pas comment il ne peut pas inférer un type correct mais pourquoi il ne peut pas.[...]
    Oui enfin, tu m'expliqueras comment on peut faire pour savoir « pourquoi il ne peut pas » sans savoir « comment il fait pour inférer ».

  6. #6
    Membre émérite
    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
    Points : 2 990
    Points
    2 990
    Par défaut
    Il s'agit d'une auto-promotion.
    Mais ça me paraissait quand même une référence utile sur l'inférence de type en OCaml, et à laquelle j'aimerais bien connaître un équivalent (officiel si possible).
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. est-ce que qq dit moi comment fait ça?
    Par S.H dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/10/2005, 01h43
  2. [Struts]comment faites-vous pour enregistrer..
    Par pouss dans le forum Struts 1
    Réponses: 7
    Dernier message: 30/09/2005, 12h55
  3. [IE]Comment fait-on un plug-in ?
    Par le Daoud dans le forum Windows
    Réponses: 2
    Dernier message: 13/04/2005, 18h54
  4. Réponses: 6
    Dernier message: 08/04/2005, 03h00
  5. [light] Comment fait-on une lumiere constante ?
    Par :GREG: dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/03/2004, 17h54

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