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
相关产品推荐
相关产品推荐

