我对函数式编程和F#还不熟悉,虽然有很多关于如何在F#中实现字符串中删除特定字符的信息,但我发现了下面的函数,希望能得到一些帮助来理解它的确切作用:
let stripchars chars str =
Seq.fold
(fun (str: string) chr ->
str.Replace(chr |> Char.ToUpper |> string, "").Replace(chr |> Char.ToLower |> string, ""))
str chars
我使用stripchars函数,并将其调用在我定义的分割函数中,如下所示:
let split (str : string) =
((stripchars "?,.,!,," str).Split ' ') |> Array.toList
我现在很难理解的是,在函数stripchars中,当传递参数“chars”包含要从字符串str中删除的字符序列时,直到最后一行“str chars”才使用它。那么这怎么可能起作用呢?
chars
不是该函数的最后一行,它只是一个非常长的函数,因此它们在几行中分开。它实际上是Seq.fold <some fun> str chars
。由于<some fun>
很长,为了易读性而这样写。将其放在一行上并运行以查看结果。 - Guy Coderchars
作为字符序列使用,而所有.NET字符串本质上都是如此。现在你正在从字符串中四次删除所有逗号。 - Joel Muellerto.str.Replace(chr |> string, "")
,当我调用stripchars函数时,我去掉了额外的逗号:((stripchars "?.!," str).Split ' ') |> Array.toList
。我想这仍然是一个相当昂贵的操作,对于大字符串来说。 - Great Cubicuboctahedron