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交互测试
- 保存仅包含函数定义的代码到
Main.hs:
inter :: [Integer] -> [Integer] -> [Integer] inter s1 s2 = [s | s <- s2, s `elem` s1]
- 启动GHCi并加载文件:
ghci Main.hs
- 在交互环境中直接调用函数:
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
相关产品推荐
相关产品推荐

