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

Haskell元组集合推导时出现‘parse error in pattern’错误求助

Haskell集合S实现的问题解决

问题根源

你代码里的列表推导式条件部分语法错误:let 2*x + y = 7是错误写法。let用于在推导式中绑定局部变量,而非做相等判断;同时Haskell中相等判断要用==,赋值用=,混淆两者会导致语法错误或逻辑错误。

修正后的代码

b = [1..20]  -- 简化写法,和[1,2..20]等价
s = [(x,y) | x <- b, y <- b, 2*x + y == 7]

main = do
  print s

运行结果

输出符合预期:[(1,5),(2,3),(3,1)]

额外优化(可选)

考虑到y可由7-2x直接计算,没必要遍历整个集合B,能提升效率:

b = [1..20]
s = [(x, 7-2*x) | x <- b, let y=7-2*x, y `elem` b]

main = do
  print s

这个版本先通过x计算出y,再判断y是否属于集合B,避免了不必要的遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:35:32