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 :

probleme exercice en ocaml [Débutant(e)]


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 11
    Points
    11
    Par défaut probleme exercice en ocaml
    J'ai encore un problème . J'ai ce truc à faire. Mais je peux pas entrer cette fonction car il m'indique une synthaxe erreur sur le else donc je ne peux pas tracer l'exécution. Comment je dois faire? Excuse moi pour toutes ces questions
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    fais l'effort de recopier le morceau du sujet, et le code...
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    On veut compter le nombre de fois qu’apparaît la chaîne ”00” dans une chaîne donnée.
    L’énoncé ci-dessous est une description de ce calcul.
    occur(y) =0 si y=""
    1 + occur(cdr(cdr(y)) si x="00"
    occur(cdr(y)) sinon
    où x est une sous chaîne extraite de y à partir de sa première position.
    Une réalisation possible de cet énoncé par un programme Ocaml est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # let rec occur y = match y with
    "" -> 0
    | _ -> let ch1 = cdr y
               in let ch2 = cdr ch1
                in if String.sub y 0 2 = "00" then 1 + occur ch2
               else occur ch1 ;;
    Ce programme ne fait pas ce qu’il est censé faire. On vous demande de le corriger. Pour
    cela on peut s’aider de la commande trace.
    1. tracer l’execution de occur "120004009";; comme suit :
    # #trace occur;;
    # occur "120004009";;

    2. Combien de fois la fonction occur est-elle appelée ?

    3. Décrire l’étape de calcul du dernier appel de la fonction, c’est à dire remplacer y par ”9”
    dans occur et en déduire l’erreur.

    4. Corriger la fonction occur

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    as-tu essayé de parenthèser ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Oui j'obtiens cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # let rec occur y = match y with
    "" -> 0
    | _ -> let ch1 = cdr y
               in (let ch2 = cdr ch1)
                in (if (String.sub y 0 2 = "00" then 1 + occur ch2))
               else (occur ch1) ;;
    Characters 46-50:
                 else (occur ch1) ;;
                 ^^^^
    Syntax error

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # let rec occur y = match y with
    "" -> 0
    | _ ->  let ch1 = cdr y in
              let ch2 = cdr ch1 in
              if ( String.sub y 0 2 = "00" ) then ( 1 + occur ch2 )
                                                    else ( occur ch1 ) ;;

    au passage cdr, ça fait un peu lisp...
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Toujours l'erreur
    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
     
    # let rec occur y = match y with
    "" -> 0
    | _ ->  let ch1 = cdr y in
              let ch2 = cdr ch1 in
              if ( String.sub y 0 2 = "00" ) then ( 1 + occur ch2 )
                                                    else ( occur ch1 ) ;;
    Characters 83-87:
                                                      else ( occur ch1 ) ;;
                                                      ^^^^
    Syntax error
    # let rec occur y = match y with
     
     
     
     
                                                    else ( occur ch1 ) ;;

  8. #8
    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
    Si ça ne fonctionne pas alors quitte l'interpréteur et recommence, copie le code dans le clipboard et colle-le dans ton interpréteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # let rec occur y = match y with
    |"" -> 0
    | _ ->  let ch1 = cdr y in
              let ch2 = cdr ch1 in
              if ( String.sub y 0 2 = "00" ) then 1 + occur ch2
                                             else occur ch1 ;;
    val occur : string -> int = <fun>
    Aide pour l'exercice: j'imagine qu'un cdr n'est valide que sous la condition que tu sais.
    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.

  9. #9
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Tu es en train de copier un programme Lisp dans l'interpréteur Caml... c'est un peu normal que ça ne marche pas, non ?

    N'oublie pas une chose : on peut écrire des programmes, sur le papier, en pseudo-langage, et c'était peut-être là l'intention de la personne qui a fait l'énoncé.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

Discussions similaires

  1. Probleme exercice de Gerard Swinnen 8.13
    Par elnabo dans le forum Tkinter
    Réponses: 5
    Dernier message: 23/03/2011, 11h44
  2. Probleme exercice à resoudre
    Par nabilfaouzi dans le forum C
    Réponses: 15
    Dernier message: 24/11/2007, 10h47
  3. probleme exercice C++
    Par ludo86 dans le forum C++
    Réponses: 9
    Dernier message: 09/04/2007, 16h00
  4. Probleme exercice list
    Par Gebudi. dans le forum C++
    Réponses: 6
    Dernier message: 31/07/2006, 16h43
  5. problemes exercices sql
    Par siciliano_messinese dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/09/2005, 17h52

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