我是F#的新手,我正在创建一个程序,该程序给出给定字符串中元音的数量以及该字符串中重复的特定元音的数量。我实现了以下代码,但我不断出错。任何人都可以显示出一种更好的方法来做到这一点。
#light
let count_letter targetChar = Seq.fold (fun count ch -> if ch = targetChar then count + 1 else count) 0
[<EntryPoint>]
let mainargv =
printf "input> "
let input = System.Console.ReadLine()
let text = input;
let ch1 = 'a'
let ch2 = 'e'
let ch3 = 'i'
let ch4 = 'o'
let ch5 = 'u'
let vowels = ['a';'e';'i';'o';'u']
let if_vowel =
fun c -> vowels |> List.contains c
0
答案 0 :(得分:2)
您的代码基本上是正确的。这是另一种相同的方法:
let inline (|>!) v f = f v ; v // tee operator
let vowels = ['a';'e';'i';'o';'u']
let if_vowel c = vowels |> List.contains c
text
|> Seq.filter if_vowel
|>! (Seq.length >> printfn "vowels: %d")
|> Seq.countBy id
|> Seq.sort
|> Seq.iter (fun (c, n) -> printfn "%c: %d" c n)
输出与您的输出相似但不完全相同,因为它仅显示存在的那些元音。