Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > F#
F# Forum d'entraide sur la programmation en langage fonctionnel F#
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/12/2010, 00h15   #1
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 434
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 434
Points : 5 298
Points : 5 298
Par défaut Problème avec une boucle for

Bonjour

J'ai une fonction qui teste les caractères d'une string à partir d'un certain point de cette chaine vers la gauche ou la droite, pour cette recherche j'utilise une boucle for.
J'aimerais récupérer en retour de cette fonction l'indice où la recherche s'arrête et évidemment ça ne fonctionne pas car le type de l'indice de boucle est unit et moi je voudairs un int.
Comment faire ?
Je donne un exemple de code
Code :
1
2
3
4
5
let search_right (x : String, i : int) =
    for k = i to x.Length - 2 do
      if Char.IsSeparator(x, k+1) then
         k
    x.Length - 1
J'ai une erreur signalée pour k
Citation:
erreur FS0001: Cette expression était censée avoir le type unit mais elle a ici le type int
Comment faire ?

Merci
__________________
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés

Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 02h38   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 148
Points : 1 148
Il n'y a pas de break ou de return pour sortir d'une boucle. La solution impérative est donc d'utiliser un while avec une variable (mutable).

Code :
1
2
3
4
let searchRight (s: string) start =
  let mutable i = start
  while i < s.Length && not (Char.IsSeparator s.[i]) do i <- i + 1
  i
On peut aussi faire le parcours en récursif :
Code :
1
2
3
4
5
6
let searchRight (s: string) start =
  let rec search i =
    if i >= s.Length then s.Length
    elif Char.IsSeparator s.[i] then i
    else search (i + 1)
  search start
Tu peux aussi utiliser IndexOfAny en listant les séparateurs :
Code :
1
2
let separators = [|' '; '\t'; '\n'|]
"Hello world".IndexOfAny(separators, 2)
(je te laisse ajuster les valeurs de retour)
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 01h07   #3
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 434
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 434
Points : 5 298
Points : 5 298
merci ça tourne.
J'aurai surement encore pas mal d'autres questions.
__________________
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés

Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h59.


 
 
 
 
Partenaires

Hébergement Web