我的递归Haskell密码掩码函数报错,+号无法使用应替换为什么?
你可以使用 :(cons 运算符)替代 +,同时修正几处语法错误即可运行:
错误原因说明
- Haskell 中的
+运算符仅支持数值类型的加法运算,不能用于字符、列表/字符串的拼接操作 - 你原有代码的
["*" + password xs]还有额外的语法问题:- 双引号包裹的
"*"是字符串类型(即长度为1的[Char]),你需要的是单个字符类型的'*' - 外层多余的方括号会把结果包装为嵌套列表,和函数声明的返回值
[Char]类型不匹配
- 双引号包裹的
修复后的递归实现
password :: [Char] -> [Char] password [] = [] password (x: xs) = '*' : password xs
: 运算符的作用是把左侧的单个元素添加到右侧列表的头部,刚好匹配你的递归逻辑,每一步将当前字符替换为'*'后拼接到剩余字符串的替换结果前。
更简洁的高阶函数实现
你也可以直接用map遍历替换所有字符,代码更精简:
password :: [Char] -> [Char] password = map (const '*')
两种实现都可以完全满足你给出的所有测试用例。
内容的提问来源于stack exchange,提问作者user17173786
相关产品推荐
相关产品推荐

