我正在尝试创建一个可以计算给定String中元音的函数。这就是我想要做的。我正在尝试仅使用管道运算符和composition(>>)运算符解决问题。
let vowels = ["a";"e";"i";"o";"u"]
let isVowel = fun c-> vowels |> List.contains c
let inline vowelCount string1 =
string1
|> Seq.toList
|> List.filter isVowel
这是我在F#交互式中运行代码时遇到的问题:
“错误FS0001:类型'字符串'与类型'seq'不兼容”
我在哪里做错了?我不明白什么?提前致谢。
答案 0 :(得分:3)
您似乎想要将vowels
定义为字符列表而不是字符串列表:
let vowels = ['a';'e';'i';'o';'u']
此单一更改将使您的代码得以编译,尽管不能达到目标。
let vowels = ['a';'e';'i';'o';'u']
let isVowel = fun c-> vowels |> List.contains c
let inline vowelCount string1 =
string1
|> Seq.toList
|> List.filter isVowel
vowelCount "qwerty"
这是一种替代解决方案,可以满足您计算字符串中元音的要求
let vowels = ['a';'e';'i';'o';'u']
let isVowel c = List.contains c vowels
let vowelCount = Seq.filter isVowel >> Seq.length
答案 1 :(得分:1)
我在哪里做错了?我不明白什么?预先感谢。
string1
是seq<string>
。string1:string
代替string1
)。然后,这将在代码的早期显示错误(当您尝试将List.filter isVowel
应用于char list
时)。答案 2 :(得分:1)
您也可以使用Seq.sumBy函数直接执行此操作:
let vowelcount : seq<char> -> int =
Seq.sumBy (function 'a'|'e'|'i'|'o'|'u' -> 1 | _ -> 0)