我遇到了Haskell中的列表列表问题。
这是我的功能:
create_matrix :: (Read t, Integral t) => [String] -> t -> [[t]]
create_list_of_lists (x:xs) num = [read x `div`z | z <- [1..num]] : create_list_of_lists xs num
当我像这样运行时:
create_list_of_lists ["1212","3232"] 3
我得到所需的输出,即
[[1212,606,404],[3232,1616,1077]
但它错过了最后的']',并向我提出了这个错误:
Exception: hondt.hs:39:1-81: Non-exhaustive patterns in function create_list_of_lists
我想这与类型有关,但我不知道我做错了什么。
答案 0 :(得分:3)
正在发生的事情是,由于Haskell的懒惰,GHCi在收到它们时打印出前两个子列表,但后来遇到了错误。此错误是因为您尚未定义create_list_of_lists
的所有可能输入,即第一个参数为空时。你需要
create_list_of_lists [] num = ???
create_list_of_lists (x:xs) num = [read x `div`z | z <- [1..num]] : create_list_of_lists xs num
如果没有[]
的条款,您最终会调用create_list_of_lists [] num
,目前尚未定义。