7
votes

F #: retirez les premiers n caractères d'une chaîne?

J'essaie d'écrire du code pour supprimer les premiers n caractères d'une chaîne. J'aurais déjà pu faire cela de manière impérative déjà, mais j'aimerais le voir faire dans l'esprit de programmation fonctionnelle. Être nouveau à la programmation f # et fonctionnelle, j'ai des problèmes ...


3 commentaires

Il convient de noter que vous ne pouvez pas supprimer les caractères d'une instance de chaîne existante, car les chaînes F # sont immuables. Vous ne pouvez créer qu'une nouvelle instance de chaîne sans ces caractères.


"Les cordes F # sont immuables" n'est pas 100% précise. Le type System.String, que F # utilise, pour toutes les applications .NET est immuable. Le seul type de chaîne mutable supporté est StringBuilder dans l'espace de noms System.Text.


Merci à tous pour votre aide


5 Réponses :


27
votes
"Hello world".[n..];;

0 commentaires

3
votes

Comme @jeff a montré, vous pouvez le faire en six caractères, ce n'est donc pas nécessairement la meilleure question à demander de voir comment "le faire dans l'esprit de la programmation fonctionnelle".

Je montre un autre moyen, Ce qui n'est pas particulièrement "fonctionnel" (comme il utilise des tableaux, mais au moins cela ne mutait pas), mais affiche au moins un ensemble d'étapes. P>

let s = "Hello, world!"
// get array of chars
let a = s.ToCharArray()
// get sub array (start char 7, 5 long)
let a2 = Array.sub a 7 5
// make new string
let s2 = new string(a2)
printfn "-%s-" s2  // -world-


0 commentaires

0
votes
let rec remove_first_n (str:string) (n:int) =
  match str, n with
  | _, n when n <= 0 -> str
  | "", _ -> ""
  | _ -> remove_first_n (str.Remove(0,1)) (n-1)

2 commentaires

+1 pour montrer une structure de fonction récursive typique, mais -2 pour venir avec une solution O (n) à un problème O (1)


Oups, je veux dire O (n ^ 2) contre o (n).



0
votes

Une autre façon de le faire (pas particulièrement fonctionnel non plus). En fait, il utilise des caractéristiques du monde: mutation et lambda: xxx

qui étant dit, je pense que le meilleur moyen est la solution de Jeff.

Une autre chose à garder L'esprit est que les chaînes sont immuables dans .NET (une valeur de chaîne ne peut pas être modifiée une fois construite) et que les chaînes F # sont en fait des chaînes .net.


0 commentaires

2
votes
"Hello world".Substring 3

0 commentaires