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 :

Syntax error (marche pas dans match mais if oui)


Sujet :

Caml

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut Syntax error (marche pas dans match mais if oui)
    Bonjour tout le monde.

    Je suis en train d'apprendre à utiliser le module Curses.

    Lorsque j'appuie sur une touche, la touche est mémorisée dans la variable "c" qui est un int.

    Mais lorsque je fais un match tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        match c with
    	      | Key.up -> blabla
                 | _ -> toto
    J'ai une erreur de syntaxe. Si je remplace le Key.up par sa valeur entière 259, évidemment, ca compile.

    Maintenant si je fais dans le même fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	      let _ = 
    		if c = Key.up then
    		  true else false
    	      in
    Là, je n'ai pas d'erreur de syntaxe. J'ai tenté de mettre Key.up entre parenthèse mais ce ne fonctionne pas.
    Alors bien sûr je pourrais faire des if, else if, else ... mais je préfère l'élégance du match et j'aimerais surtout comprendre ce que je n'ai pas compris.

    Merci du coup de main.

    Dest.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Ce qu'on met à gauche des flèches dans un match, ce ne sont pas n'importe quelle expression OCaml, ce sont des choses spéciales qu'on appelle des "motifs" (patterns). Les constantes sont des motifs, les variables sont des motifs, _ est un motif, les couples de motifs sont des motifs. Mais par exemple, "(f x)" (une application de fonction) n'est pas un motif et n'est pas valide ici.

    Dans ton cas c'est pareil, tu essaies de mettre une valeur, ce n'est pas valide. Et il ne faut pas croire que "match foo with bar -> ..." c'est pareil que "if foo = bar then ...". Pas du tout, ça ne fonctionne pas du tout comme cela et si tu le penses tu vas avoir des erreurs graves.

    Par exemple :
    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    let est_ce_moi individu =
       let mon_pseudo = "bluestorm" in
       let mon_mail = "bluestorm dot dylc chez gmail" in
       match individu with
       | mon_pseudo -> true
       | mon_mail -> true
       | _ -> false;;
     
    print_endline (if est_ce_moi "dest" then "c'est moi !" else "c'est pas moi ...");;

    À ton avis, ce code va afficher quoi ?


    Si tu ne comprends pas ton erreur, il faut que tu relises un cours de OCaml avec soin pour être sûr de bien comprendre la différence entre les expressions (comme Key.up) et les motifs. Sinon, tu feras forcément des erreurs par la suite.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Bonjour Bluestorm.

    Merci pour ta réponse rapide mais aussi pour m'avoir prouvé que j'avais tord dans ma façon de faire. Donc oui en l'occurence, ton test va retourner "c'est moi" alors qu'il ne devrait pas (j'ai testé).

    Je pensais que le match testait par valeur.
    Je voulais employer un match comme on emploierait un switch en C.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2008, 13h17
  2. Outlook ne marche pas dans mon réseau sous linux
    Par Germain123 dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 25/03/2006, 22h15
  3. Balise <PRE> marche pas dans un form
    Par chateau64 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 14/11/2005, 09h20
  4. aperçu d image avec input type file marche pas dans ffx
    Par siddh dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/11/2005, 09h11
  5. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43

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