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

Haskell在GHC中出现Parse Error on Input `|'错误求助

解决Haskell中Parse Error on Input |'`的问题

你的核心问题是在main的do块内部定义函数,Haskell不允许这么做——do块只能包含IO操作、变量绑定,不能直接定义顶层风格的函数。把函数移到main外面就能解决这个解析错误。

另外还有两个需要修正的问题:

  • sum是Haskell标准库(Prelude)里的内置函数,自定义同名函数容易引发混淆,建议改名比如sumMultiples。
  • Project Euler第1题要求计算小于1000的3或5的倍数之和,所以调用时应该传999而非1000;同时print sum 1000语法错误,需要用括号或者$明确优先级。

修正后的完整代码:

sumMultiples :: Int -> Int
sumMultiples n
    | n == 0         = 0
    | n `mod` 3 == 0 = n + sumMultiples (n - 1)
    | n `mod` 5 == 0 = n + sumMultiples (n - 1)
    | otherwise      = sumMultiples (n - 1)

main = do
    print $ sumMultiples 999

额外优化建议

递归写法虽然直观,但对于大数可能效率一般,你也可以用更简洁的列表推导式实现:

main = do
    print $ sum [x | x <- [1..999], x `mod` 3 == 0 || x `mod` 5 == 0]

这种写法更符合Haskell的函数式风格,可读性也更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:30:22