You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中如何获取自定义filter函数返回的列表长度

实现方法

你只需要对筛选得到的结果列表调用length函数即可,同时调整函数的返回类型签名:

  1. 基于你现有的列表推导式修改:
-- 调整返回值类型为Int,因为长度是整数
count'filter :: (a -> Bool) -> [a] -> Int
count'filter p xs = length [ x | x <- xs, p x]
  1. 更简洁的函数组合写法(基于标准库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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:57:03