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

GHCi中列表推导式缺失右方括号且控制台冻结问题求助

问题分析与解决

你的问题核心是惰性求值导致的无限遍历:

  • Haskell的列表是惰性的,你用了无限列表[1..],并且把13*x + 3 <= 1000这个上限条件放在过滤链的最后。
  • 找到第一个符合条件的元素341之后,GHCi会继续无限遍历更大的x,检查是否满足所有条件(模12等于5、模11等于0且小于等于1000)。但实际上满足所有条件的下一个元素超过了1000,GHCi会一直遍历验证,导致控制台卡住,无法输出列表的闭合括号。

解决方法

方法一:直接限定x的有限范围

先计算x的最大可能值:(1000 - 3) // 13 = 76,把x的范围改成[1..76],避免无限遍历。修改后的推导式:

[13*x + 3 | x <- [1..76], rem (13*x + 3) 12 == 5, mod (13*x + 3) 11 == 0]

GHCi会遍历有限的x,快速完成计算,输出完整列表[341]。

方法二:提前放置上限条件

把13*x + 3 <= 1000移到过滤条件的最前面,让Haskell更早终止不符合上限的遍历:

[13*x + 3 | x <- [1..], 13*x + 3 <= 1000, rem (13*x + 3) 12 == 5, mod (13*x + 3) 11 == 0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:05:27