Haskell中如何获取自定义filter函数返回的列表长度
实现方法
你只需要对筛选得到的结果列表调用length函数即可,同时调整函数的返回类型签名:
- 基于你现有的列表推导式修改:
-- 调整返回值类型为Int,因为长度是整数 count'filter :: (a -> Bool) -> [a] -> Int count'filter p xs = length [ x | x <- xs, p x]
- 更简洁的函数组合写法(基于标准库
filter实现):
count'filter :: (a -> Bool) -> [a] -> Int count'filter p = length . filter p
测试示例
用你给出的ispos判断函数测试:
ispos :: (Ord a, Num a) => a -> Bool ispos x = x > 0 -- 测试调用 main = print $ count'filter ispos [-5, -2, 0, 1, 3, 4] -- 输出结果:3
注意事项
该实现需要遍历整个列表才能得到最终长度,如果你需要处理无限列表,该实现会陷入死循环,无法返回结果。
内容的提问来源于stack exchange,提问作者rubypoe
相关产品推荐
相关产品推荐

