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

Haskell加载模块成功调用evenOrOdd报Not in scope错误求助

Haskell 函数未纳入作用域报错解决步骤
  • 确认文件保存与加载操作正确
    写完代码后必须先保存后缀为.hs的源文件,再在GHCi中执行:load 你的文件名.hs命令,等终端输出Ok, one module loaded.的成功提示后再调用函数。如果修改了代码内容,需要重新执行:load命令加载更新后的文件。
  • 确认模块导出配置正确
    如果你在.hs文件头部写了module 模块名 (xxx) where的模块声明,必须把evenOrOdd加入括号内的导出列表,比如module Practice (evenOrOdd) where,否则函数默认是模块私有,外部无法访问。新手练习可以直接删掉头部的module声明,默认会导出所有顶层定义的函数。
  • 确认函数名拼写完全匹配
    Haskell 是大小写完全敏感的语言,调用时的函数名必须和定义时的evenOrOdd大小写完全一致,拼写错误也会触发作用域报错。

附带代码逻辑修正

你当前的奇偶判断逻辑存在错误,div是整数除法运算,判断奇偶应该使用取模运算mod,修正后的代码如下:

evenOrOdd :: Integral a => a -> [Char]
evenOrOdd n = if mod n 2 == 0 then "even" else "odd"

也可以直接调用Haskell内置的even函数简化写法:

evenOrOdd :: Integral a => a -> [Char]
evenOrOdd n = if even n then "even" else "odd"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:30:02