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 :

Booléen pris pour un unit


Sujet :

Caml

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 54
    Points : 32
    Points
    32
    Par défaut Booléen pris pour un unit
    Bonjour,

    dans le cadre d'une fonction déterminant par dichotomie la présence ou non d'un élément dans un tableau trié que voici :

    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
    let rec dicho x tab =
     
    	if vect_length tab = 1
    	&& tab.(0) <> x
    	 then false
    	 else 	 
     
    	let i = if (vect_length tab) mod 2 = 1
    		 then (vect_length tab +1) /2 -1
    		 else (vect_length tab) /2 -1
    	in
     
    	if tab.(i) > x
    	 then dicho x ( sub_vect tab 0 (i-1) )
    	 else if tab.(i) < x 
    	       then dicho x ( sub_vect tab (i+1) (vect_length tab -1) )
    	       else if tab.(i) = x 
    		     then true
     
    ;;
    Caml me reproche l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Entrée interactive:
    >	............if tab.(i) = x 
    >		     then true
    Cette expression est de type unit,
    mais est utilisée avec le type bool.
    #
    J'avoue que j'ai du mal à voir ce qui cloche, merci de m'éclairer !

  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
    Dans une expression if cond then value, value doit être de type unit. Car dans ce cas, il n'y a pas de else, c'est plus une "instruction" qu'une expression.

    Ton code est facile à corriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if tab.(i) > x
    then dicho x ( sub_vect tab 0 (i-1) )
    else if tab.(i) < x 
    then dicho x ( sub_vect tab (i+1) (vect_length tab -1) )
    else (* tab.(i) = x *) true
    Note: plutôt que de découper ton tableau en sous-tableau il serait plus efficace de faire varier deux indices, une borne inférieure et une borne supérieure.
    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
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 54
    Points : 32
    Points
    32
    Par défaut
    Très bien merci, je vais essayer en faisant varier 2 indices plutôt qu'en extrayant des sous tableaux

    ( Tant que j'y suis, comment afficher la valeur d'une variable plutôt que son nom dans une chaîne de caractère ? Par exemple j'ai une variable x qui a une certaine valeur, disons 3, et je voudrais que lorsque ma fonction me rend " x trouvé à la position... " elle me rende " 3 trouvé à la position... " . Est-ce faisable ? )

  4. #4
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    ( Tant que j'y suis, comment afficher la valeur d'une variable plutôt que son nom dans une chaîne de caractère ? Par exemple j'ai une variable x qui a une certaine valeur, disons 3, et je voudrais que lorsque ma fonction me rend " x trouvé à la position... " elle me rende " 3 trouvé à la position... " . Est-ce faisable ? )
    Oui, c'est faisable et la solution la plus souple pour afficher des valeurs de types différent fait appel au module Printf (documentation ici). Ici en l'occurrence tu as besoin de la fonction sprintf (le s en rouge est important) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let affiche_entier x (pos_x, pos_y) = 
      Printf.sprintf "%d trouvé à la position (%d, %d).\n" x pos_x pos_y
    Une remarque en passant : comme les fonctions du module Printf ont des noms très particuliers, il est recommandé d'utiliser open Printf pour alléger l'écriture (alors que, de façon générale, abuser de open n'est pas une bonne chose car ça peut conduire à des comportements inattendus).

    Cordialement,
    Cacophrène

  5. #5
    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
    À mon avis il voulait demander "Est-ce faisable en Caml-Light ?".
    Le problème c'est que plus personne ne s'en souvient

    Read The F****** Manual
    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.

  6. #6
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Re,

    À mon avis il voulait demander "Est-ce faisable en Caml-Light ?"
    Oups... oui en effet c'est très probable. Bon, je passe mon tour alors.

    Cordialement,
    Cacophrène

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

Discussions similaires

  1. format d'écriture pour write(unit, namelist)
    Par tiresias54 dans le forum Fortran
    Réponses: 4
    Dernier message: 20/06/2012, 10h15
  2. [BPW] SDK ATI Rage 128 pour DOS + Unité FLAT
    Par Alcatîz dans le forum Codes sources à télécharger
    Réponses: 1
    Dernier message: 16/11/2010, 07h20
  3. [Free Pascal] Help files pour les units
    Par Jean-Christophe77 dans le forum Free Pascal
    Réponses: 2
    Dernier message: 19/05/2008, 19h16
  4. Partage automatique pour chaque unité d'organisation
    Par AMGHAR dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 06/03/2008, 19h19
  5. Meilleure solution pour des unit tests? (dans mon cas)
    Par nicdo77 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 19/08/2007, 20h32

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