Haskell中如何统计列表内满足小于3条件的元素个数
问题排查
你的代码存在两个核心问题:
- 语法错误:你写的
filterLove filter (< 3) a = length a把filter、(<3)都当成了filterLove的入参,而不是调用filter函数处理列表的逻辑。 - 逻辑错误:你直接计算原列表
a的长度,没有对筛选后的结果计数。
正确实现
写法1:显式传参(易理解)
filterLove :: (Num a, Ord a) => [a] -> Int filterLove a = length (filter (< 3) a)
写法2:函数组合(更简洁)
filterLove :: (Num a, Ord a) => [a] -> Int filterLove = length . filter (< 3)
逻辑说明
- 先用
filter (<3) 原列表筛选出所有小于3的元素,得到符合条件的新列表 - 再用
length计算新列表的长度,就是符合条件的元素总数量 - 示例输入
[42, 66, 15, 2]筛选后得到[2],长度为1,和要求的输出一致。
内容的提问来源于stack exchange,提问作者user11574067
相关产品推荐
相关产品推荐

