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 de fonctions


Sujet :

Caml

  1. #1
    Membre à l'essai
    Homme Profil pro
    fdf
    Inscrit en
    Novembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : fdf

    Informations forums :
    Inscription : Novembre 2014
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Typage de fonctions
    Bonsoir

    Je n'arrive pas à comprendre les solutions de l'exercice :

    Donner le type des des expressions suivantes :

    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
    20
    21
    22
    23
    # fun f x y -> f x y
    ('a -> 'b -> 'c) -> 'a -> 'b -> 'c = <fun>
     
    #fun f g x -> f (g x)
    ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b = <fun>
     
    #fun f x y -> f (x y f)
    ('a -> 'b) -> ('c -> ('a -> 'b) -> 'a) -> 'c -> 'b = <fun>
     
    #fun f x y -> (f x) (y f)
    ('a -> 'b -> 'c) -> 'a -> (('a -> 'b -> 'c) -> 'b) -> 'c = <fun>
     
    #fun f x y -> (f x) y
    ('a -> 'b -> 'c) -> 'a -> 'b -> 'c = <fun>
     
    #fun f x y -> (f x) / (f y)
    ('a -> int) -> 'a -> 'a -> int = <fun>
     
    #fun f x y -> f x,y
    ('a -> 'b) -> 'a -> 'c -> 'b * 'c = <fun>
     
    #fun f x y -> f (x,y)
    ('a * 'b -> 'c) -> 'a -> 'b -> 'c = <fun>
    Merci

  2. #2
    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
    Pour chaque type il y a une règle élémentaire de typage.

    Pour la flèche :
    (f : 'a->'b) & (x : 'a) <=> (f x : 'b)

    Pour l'étoile :
    (x : 'a) & (y : 'b) <=> (x,y : 'a * 'b)

    En appliquant systématiquement ces règles dans un sens ou dans l'autre :
    1. on arrive à typer n'importe quelle expression bien formée.
    2. ou bien on arrive à trouver une expression bien formée qui possède le type recherché.


    Ce qu'on te demande ici c'est (1).
    En pratique ça n'est pas le plus difficile, d'ailleurs le top-level Caml sait très bien le faire à ta place.
    D'après moi le sens (2) est plus intéressant car il correspond davantage à l'exercice pratique de la programmation. Car généralement on doit répondre à une spécification. Or une spécification signifie souvent que le type précède l'expression et non l'inverse.

    Les enseignants omettent parfois certains précisions importantes :

    1. L'application (le caractère espace) d'une valeur est associative à gauche.
    C'est à dire que f x y = (f x) y.

    2. La flèche est associative à droite.
    C'est à dire que 'a -> 'b -> 'c = 'a -> ('b -> 'c).

    3. L'application d'un type est associative à gauche.
    C'est à dire que type 'a tree = N of 'a tree list
    Est le même type que type 'a tree = N of ('a tree) list
    Et n'a rien à voir avec le type (invalide) type 'a tree = N of 'a (tree list).
    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.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 282
    Points : 939
    Points
    939
    Par défaut
    @SpiceGuid : court, clair. Donc génial.
    Je crois que je viens d'économiser quelques arrachages de cheveux, tout comme (àmha) le posteur initial.
    poke 1024,0; poke 214,214

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/01/2012, 13h37
  2. Code retour des fonctions & typage
    Par domiq44 dans le forum C
    Réponses: 3
    Dernier message: 27/04/2011, 15h33
  3. Réponses: 6
    Dernier message: 23/08/2010, 13h46
  4. Petite question sur le typage des fonctions
    Par Dim Me As New Idiot dans le forum F#
    Réponses: 4
    Dernier message: 13/07/2010, 11h41
  5. [PHP 5.3] Typage des paramètres d'une fonction pour ou contre
    Par berceker united dans le forum Langage
    Réponses: 6
    Dernier message: 09/07/2009, 16h34

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