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
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
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 :
Ce programme ne fait pas ce qu’il est censé faire. On vous demande de le corriger. Pour
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 ;;
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
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
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...
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 ) ;;
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.
Aide pour l'exercice: j'imagine qu'un cdr n'est valide que sous la condition que tu sais.
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>
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.
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager