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

Haskell中如何使用all函数筛选能被2-15整除的前十个数

正确使用Haskell的all函数筛选符合条件的数

你之前的写法问题出在对Haskell中all函数的参数逻辑理解上,先明确all的核心用法:它是高阶函数,第一个参数是返回布尔值的判断函数,第二个参数是待检查的元素列表,作用是验证列表中所有元素都满足判断函数的条件,返回True或False。

你的错误写法里:

  • 第一种x mod [2..15] == 0:mod是二元运算,只能接受两个数值,不能把列表作为第二个参数,类型完全不匹配。
  • 第二种all x mod [2..15] == 0:参数顺序彻底错误,all的第一个参数必须是函数,不是数值。

针对你的需求,正确的写法是:

take 10 [x | x <- [1..], all (\n -> x `mod` n == 0) [2..15]]

逻辑拆解:

  • 遍历自然数序列中的每个x,我们需要检查[2..15]里的所有n,是否都满足x能被n整除。
  • \n -> x mod n == 0是一个匿名函数,接收n作为参数,返回x mod n == 0的布尔结果。
  • all会把这个匿名函数依次应用到[2..15]的每个元素上,只有当所有元素都返回True时,整个all表达式才为True,此时x会被选入结果列表。

如果你习惯中缀风格,也可以用函数组合简化写法,效果完全一致:

take 10 [x | x <- [1..], all ((==0) . (x `mod`)) [2..15]]

内容的提问来源于stack exchange,提问作者Aavesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:40:26