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

在Haskell中使用filter函数实现返回整数n所有约数的功能

问题原因分析

你当前代码出错的核心是filter函数的参数传递不符合要求:

  • filter的类型为filter :: (a -> Bool) -> [a] -> [a],仅接受两个入参:第一个是用于判断元素是否保留的单参数函数,第二个是待过滤的列表。
  • 你写的filter divides n [1..n]相当于给filter传入了三个参数(divides、n、[1..n]),类型匹配失败自然无法运行。

修正方案

你的divides函数参数顺序刚好适配部分应用的场景:divides接受两个参数x、y,判断y是不是x的约数。只需要把第一个参数固定为n,就能得到一个单参数判断函数divides n,刚好可以作为filter的第一个参数:

divisors n = filter (divides n) [1..n]

额外优化建议

你现有的divides函数可以简化,不需要额外写守卫分支:比较运算==本身就会返回Bool值,直接返回比较结果即可:

divides x y = mod x y == 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:06