Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2010, 00h15   #1
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 287
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 287
Points : 5 047
Points : 5 047
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

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 : 944
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 944
Points : 1 080
Points : 1 080
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
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 287
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 287
Points : 5 047
Points : 5 047
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

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 Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h14.


 
 
 
 
Partenaires

Hébergement Web