2017-08-26 35 views
0

我试图将两个列表压缩在一起,但我无法为我的生活弄清楚为什么它不会运行代码。我有两个声明为变量的列表,并且我写了一个函数将它们组合在一起。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 

在这里,我的希望是,这个代码将递归地对组合成元组,但我很新的哈斯克尔,所以我甚至不知道我已经写的功能(编译器没有按” t抱怨)。

我的问题来了,当我尝试运行这一行代码,

comb letters numbers 

和编译器告诉我:“解析错误:模块头,进口报关或顶级声明预期”我不知道我应该在这里申报什么。我可以请一些帮助吗?

+0

你刚刚在文件中间放了那个'comb letters numbers'表达式吗? – melpomene

+0

它在我的文件的最底部。我宣布列表,编写代码,然后使用梳状字母数字行 –

回答

4

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

2 + 2 

什么,你可能应该做的是加载文件在您选择(ghci)的交互式解释,然后键入表达式出现,这将正常工作。

或者你可以在你的文件为main定义:

main = print (comb letters numbers) 

这应该允许它被成功地编译成可执行。

但重点是,一个文件是一系列的声明。您的程序的入口点是一个名为main的符号。无论你如何定义main,就像启动程序时运行的那样(并且该东西必须是IO动作,例如由print返回的动作)。

相关问题