Haskell将两个列表压缩在一起

时间:2017-08-26 19:35:12

标签: haskell

我正在尝试将两个列表压缩在一起,但我不能为我的生活弄清楚为什么它不会运行代码。我有两个声明为变量的列表,我写了一个函数将它们组合在一起。

letters = ["a","b","c"]
numbers = ["1","2","3"]

comb :: [a] -> [b] -> [(a,b)]
comb _ [] = []
comb [] _ = []
comb (x:xs)(y:ys) = (x,y):comb xs ys

我希望这里的代码会递归地将这些对组合成元组,但我对Haskell很新,所以我甚至不确定我编写的内容是否有用(编译器不会抱怨它) )。

当我尝试使用此行运行代码时,我的问题出现了,

comb letters numbers

并且编译器告诉我“解析错误:模块头,导入声明或期望的顶级声明”。我不确定我应该在这里宣布什么。我可以请一些帮助吗?

1 个答案:

答案 0 :(得分:4)

您不能只将表达式放在文件中。换句话说,您不需要comb;你的问题可以减少到

2 + 2

您可能应该做的是将文件加载到您选择的交互式解释器(ghci)中,然后在那里键入表达式,这将起作用。

或者您可以在文件中提供main的定义:

main = print (comb letters numbers)

这应该允许它成功编译成可执行文件。

但重点是,文件是一系列声明。程序的入口点是名为main的符号。无论你定义main是什么,当你启动程序时运行的是什么(那个东西必须是IO动作,比如print返回的动作)。