Haskell无递归实现onlyVowels函数 提取字符串列表中的元音
解决方案
问题原因
- 原代码直接对字符串列表调用
filter,没有对列表中的每个字符串单独做元音过滤,类型完全不匹配 - 变量名重复,外层函数参数
x和isAVowel的入参x重名,引发变量覆盖问题
修正后代码
onlyVowels :: [[Char]] -> [[Char]] onlyVowels = map (filter isAVowel) where isAVowel c = elem c "aeiouyAEIOUY"
实现说明
- 用高阶函数
map遍历输入的字符串列表,无需手动写递归,符合要求 - 对每个字符串元素,调用
filter保留属于元音的字符,最终返回处理后的字符串列表 - 可直接通过示例测试:
onlyVowels ["Return", "Only", "Vowels", "Please"]输出结果为["eu","Oy","oe","eae"],和预期完全一致
内容的提问来源于stack exchange,提问作者BeanieBarrow
相关产品推荐
相关产品推荐

