我正在尝试将两个列表压缩在一起,但我不能为我的生活弄清楚为什么它不会运行代码。我有两个声明为变量的列表,我写了一个函数将它们组合在一起。
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
并且编译器告诉我“解析错误:模块头,导入声明或期望的顶级声明”。我不确定我应该在这里宣布什么。我可以请一些帮助吗?
答案 0 :(得分:4)
您不能只将表达式放在文件中。换句话说,您不需要comb
;你的问题可以减少到
2 + 2
您可能应该做的是将文件加载到您选择的交互式解释器(ghci
)中,然后在那里键入表达式,这将起作用。
或者您可以在文件中提供main
的定义:
main = print (comb letters numbers)
这应该允许它成功编译成可执行文件。
但重点是,文件是一系列声明。程序的入口点是名为main
的符号。无论你定义main
是什么,当你启动程序时运行的是什么(那个东西必须是IO动作,比如print
返回的动作)。