如何检查列表所有元素等于指定值?Haskell函数实现求助
问题解决:检查列表所有元素是否为"car"
你的代码逻辑存在错误:当列表第一个元素是"car"且后面还有元素时,你直接返回了False,完全没有递归检查剩余元素是否符合要求。比如调用go ["car","car","car"]时,会匹配go ("car":xs)分支直接返回False,这和预期结果相反。
正确的递归实现
go :: [String] -> Bool go [] = True -- 空列表默认满足条件(全称命题空真) go ("car":xs) = go xs -- 第一个元素是"car",递归检查剩余列表 go _ = False -- 第一个元素不是"car",直接返回False
更简洁的内置函数实现
Haskell提供了all函数可以直接完成这类全量检查,一行代码就能实现需求:
go :: [String] -> Bool go = all (== "car")
测试验证
- 调用
go ["car","car","car"]返回True - 调用
go ["car","car","bus"]返回False
内容的提问来源于stack exchange,提问作者Yavuzhan Canli
相关产品推荐
相关产品推荐

