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

Haskell中inter函数调用报错:逗号无法测试两个列表的问题

问题分析与解决方案

1. 修复核心语法错误

你代码里的inter [5, 6, 3, 1], [5, 2, 1, 3]存在两个问题:

  • Haskell的函数调用使用空格分隔参数,不能用逗号,正确写法是inter [5, 6, 3, 1] [5, 2, 1, 3]
  • 顶层代码不允许直接放置函数调用表达式,必须将测试逻辑封装到main函数中,或在GHCi交互环境中调用。

2. 两种正确的测试方式

方式一:通过main函数输出结果

修改后的完整可运行代码:

inter :: [Integer] -> [Integer] -> [Integer]
inter s1 s2 = [s | s <- s2, s `elem` s1]

main :: IO ()
main = print $ inter [5, 6, 3, 1] [5, 2, 1, 3]

编译运行后会输出两个列表的交集:[5,1,3]

方式二:GHCi交互测试

  1. 保存仅包含函数定义的代码到Main.hs:
inter :: [Integer] -> [Integer] -> [Integer]
inter s1 s2 = [s | s <- s2, s `elem` s1]
  1. 启动GHCi并加载文件:
ghci Main.hs
  1. 在交互环境中直接调用函数:
inter [5, 6, 3, 1] [5, 2, 1, 3]

执行后会立即返回结果[5,1,3]

3. 报错原因补充

  • parse error on input ‘,’:完全是因为用逗号分隔函数参数的错误写法,Haskell不支持这种语法。
  • Variable not in scope: main:由于前面的语法错误导致编译失败,模块未成功加载,因此GHCi找不到main函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:50:43