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 :

[Débutant] Questions de syntaxe


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Par défaut [Débutant] Questions de syntaxe
    Bonjour,

    j'ai deux questions concernants plus ou moins la syntaxe de caml:

    (1)
    Dans une fonction, je voudrais écrire qqc comme:

    if a=1 then j=w else j=v

    et après je travaille avec j.

    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
     
    type lapin = {dy : int; adn : (int*int) list;};;
     
    let etape l = 
      match l with
        |  [] -> None
        | (a,b)::ll ->
    	if a = 1 
    	  then let j = ll in
    	    let l' = {dy = b; adn = j} in
                  if l'.dy < 0 || l'.dy > 1000 
    	        then None
    	      else Some l'
    	else let j = (a-1,b)::ll in
    	  let l' = {dy = b; adn = j} in
                if l'.dy < 0 || l'.dy > 1000 
    	      then None
    	    else Some l'
    ;;
    J'ai pas trouvé d'autre solution que redoubler le code. Qu'est-ce que je peux faire pour que j ne soit plus local dans le bloc?


    (2)
    En utilisant Graphics, dans une fonction, je voudrais faire les étapes suivantes:

    set_color white
    fill_circle (fst p.pos) (snd p.pos) 3
    set_color black
    fill_circle (fst x.pos) (snd x.pos) 3


    Comment est-ce que je pourrais lier les quatre étapes? J'ai déjà essayé and et in...

    Merci d'avance, et je m'excuse pour mes fautes de langue.

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    (1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let j = (if a = 1 then w else v) in ...
    (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    begin
      set_color white;
      fill_circle (fst p.pos) (snd p.pos) 3;
      set_color black;
      fill_circle (fst x.pos) (snd x.pos) 3;
    end
    (tu peux utiliser de simple parenthèses à la place de begin et end, mais parfois c'est plus clair avec les mots clés, question de goût)

    --
    Jedaï

  3. #3
    alex_pi
    Invité(e)
    Par défaut
    La sytaxe let x = v in e est peut être peu conventionnel dans le monde des langages de programmation "mainstream", mais elle a tout de même un gros avantage : On voit facilement la portée de la variable x. C'est exactement e.
    Donc quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if cond then
      let y = v1 in e1
    else
      let y = v2 in e2
    dans e1, la variable y vaut v1, et dans e2, une autre variable y vaut v2. En revanche, dès que tu sors du if ... then ... else ..., il n'y a plus de variable y !

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Il y a quelque chose d'équivalent, mais qui ne marche pas dans toutes les distributions OCaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let x = y + 1 where y = 2;;
    Le where c'est équivalent au "in" sauf que la syntaxe c'est let x = e where v, autrement on "inverse" l'expression e et la variable v, et on remplace in par where.

    Je crois que ça passe sous Caml Light, mais OCaml non.

  5. #5
    Membre Expert
    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
    Par défaut
    Il y a une règle très simple à propos du where en Caml: n'utilisez jamais where en Caml.
    (problème de portabilité et problème de lisibilité de la portée)

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    Je ne suis pas convaincu, et d'ailleurs j'apprécie assez where pour avoir codé une extension (pas encore complètement satisfaisante) syntaxique pour OCaml : pa_where.

    Bien sûr, where apporte des possibilités d'ambiguités (si on l'utilise à l'excès avec une indentation volontairement fourbe, ça peut faire des chocapics), et c'est au programmeur de faire attention. Le confort (en lecture comme en écriture) apporté le récompensera de ce petit effort.

Discussions similaires

  1. [Débutant] Question de base sur le BDE et les SGBD
    Par Invité dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/03/2005, 08h45
  2. [Débutant] questions sur Visibroker
    Par Man Dak dans le forum CORBA
    Réponses: 1
    Dernier message: 29/06/2004, 23h02
  3. [débutant] question sur les #
    Par Ultros dans le forum C
    Réponses: 3
    Dernier message: 29/04/2004, 12h30
  4. [C linux makefile] question de syntaxe
    Par Ultros dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 09/04/2004, 07h58
  5. PL/Sql Débutant question
    Par Guld dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/02/2004, 17h48

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