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 :

Pourquoi ma fonction n'est-elle pas de type int ?


Sujet :

Caml

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Pourquoi ma fonction n'est-elle pas de type int ?
    Bonjour
    J'ai fait une fonction toute simple, mais je ne comprend pas pourquoi le compilateur m'empçeche de l'utiliser avec un read_int, car pour moi elle est de type int.

    1. let somme_tableau_entiers tab=
    2. let somme=ref 0 in
    3. for i=0 to pred(Array.length tab) do
    4. somme:=!somme+tab.(i);
    5. done;
  2. (!somme) in
  • let resultat=somme_tableau_entiers [|1;2;3;4|] in
  • read_int resultat;


  • This expression has type int but is here used with type unit

    Comment résoudre ce problème (en castant ?) ?

    Je vous remercies de bien vouloir m'aider.

  • #2
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    Je ne comprends pas ce que tu veux faire avec ce "read-int",
    tu calcules le résultat et tu veux l'afficher ou le renvoyer non ?
    read_int a le type suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    val read_int : unit -> int
    et s'appelle avec largument () de type unit, et renvoie un entier lu sur l'entrée standard.
    Comme tu l'appelles avec resultat qui est un entier, ca explique l'erreur de typecheck.
    Je pense que tu veux écrire "print_int" à la place.
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  • #3
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Comme l'a dit Steki-kun, utilise print_int si tu veux afficher le résultat.

    Astuce : ta fonction somme_tableau_entiers peut s'écrire plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let somme_tableau_entiers = Array.fold_left (+) 0;;
    D'une manière générale, évite autant que possible l'impératif et les effets de bords (notamment les ref et les mutable).
    Comment résoudre ce problème (en castant ?) ?
    Noooon !
    Je suppose que tu as appris le C (ou un langage du même genre) pour avoir de si mauvais réflexes ? Un cast sert à tromper un système de typage : c'est une très mauvaise chose qu'il faut éviter à tout prix. En Caml, tu n'auras jamais besoin de faire cela.
    Pour les conversions de types, il y a *_of_* (mais ce sont de vraies conversions, pas des casts).

    (à titre purement informatif, c'est la fonction Obj.magic qui joue le rôle d'un cast)

  • #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci, mon problème était en effet juste d'avoir confondu read_int et print_int. Elle était si primaire que je ne l'avais même pas trouvée.

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

    Discussions similaires

    1. Réponses: 13
      Dernier message: 31/07/2013, 11h25
    2. Pourquoi la valeur de mon return n'est-elle pas illégale?
      Par mrTerribleLie dans le forum Débuter
      Réponses: 5
      Dernier message: 17/07/2011, 11h51
    3. Objet attendu, la fonction n'est même pas exécutée
      Par FrankOVD dans le forum Général JavaScript
      Réponses: 1
      Dernier message: 04/07/2006, 16h42
    4. La fonction fgets est-elle compatible Windows/Unix ?
      Par ashurai dans le forum Langage
      Réponses: 1
      Dernier message: 05/04/2006, 17h59
    5. Pourquoi rand()%N n'est il pas équiprobable?
      Par Pragmateek dans le forum C++
      Réponses: 12
      Dernier message: 22/03/2006, 23h37

    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