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

