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

Haskell含if-then-else的递归let函数编译错误咨询

问题解答
  • 错误根源:你混淆了Haskell交互式环境(GHCI)和编译型源文件的语法差异
  • 你写的let fact n = ...是GHCI里的专属语法——在交互式环境里,定义顶层函数必须用let来绑定;但把代码放到.hs源文件里编译时,顶层函数定义不需要加let,直接写函数名和逻辑就行。

修正后的代码示例

如果要在online gdb里编译运行,你可以这么写:

-- 直接定义顶层函数,不需要let
fact n = if n == 0 then 1 else n * fact (n - 1)

-- 加上main函数才能生成可执行程序,调用fact并打印结果
main = print $ fact 5

补充说明

  • 图片里的程序能运行,是因为它是在GHCI交互式终端里执行的,let是这个场景下的正确语法
  • 这个语法没有过时,只是不同场景下的语法规则不一样——你在online gdb里是编译源文件,得遵循编译型代码的语法规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:32