如何在Haskell中实现字符分值计算函数并正确编写元音检测逻辑
问题排查与修正方案
现有代码的核心错误
- 类型定义错误:
n :: Int -> Int声明了接收Int返回Int的函数类型,但你直接赋值0,类型不匹配,且这个变量完全没有存在必要isVowel类型确实应该改为Char -> Bool,你当前实现返回的是装了字符的列表,逻辑上永远返回真,没有起到判断元音的作用
- 逻辑实现错误:
isVowel只判断了小写元音,没有覆盖大写元音,且条件分支永远返回x,没有做布尔判断score函数里你把三个条件用列表包裹,也没有做数值相加,语法完全不合法,Haskell无法识别你要表达的「符合条件就加1」的逻辑
正确实现代码
首先需要导入Data.Char里的工具函数:
import Data.Char (isAlpha, isUpper, toLower) isVowel :: Char -> Bool isVowel c = toLower c `elem` ['a', 'e', 'i', 'o', 'u'] score :: Char -> Int score c | not (isAlpha c) = 0 | otherwise = base + vowelBonus + upperBonus where base = 1 vowelBonus = if isVowel c then 1 else 0 upperBonus = if isUpper c then 1 else 0
验证测试
运行示例测试可确认功能正确性:
-- 所有测试结果都为True score 'A' == 3 score 'a' == 2 score 'B' == 2 score 'b' == 1 score '.' == 0
内容的提问来源于stack exchange,提问作者idontknowhowtocode
相关产品推荐
相关产品推荐

