我有这个功能来创建一个列表列表,根据我实现的一些规则,但它给我一个恼人的错误,我无法理解如何修复。
以下是它收到的清单:
["3123","11254","790","86214","114125","36214"]
,值为
num = 7
这是功能:
create_list_of_lists :: Integral t => [t] -> t -> [t]
create_list_of_lists (x:xs) num = [x `div`z | x <- xs, z <- [1..num]]
当我编译它时,我没有错误,但当我用这个命令运行它时:
create_list_of_lists ["3123","11254","790","86214","114125","36214"] 7
我收到了这个错误:
我做错了什么?
答案 0 :(得分:3)
那是因为您将其作为String
的列表而不是Integer
的列表传递。这应该有效:
*Main> create_list_of_lists [3123,11254,790,86214,114125,36214] 7
[11254,5627,3751,2813,2250,1875,1607,790,395,263,197,158,131,112,86214,43107,28738,21553,17242,14369,12316,114125,57062,38041,28531,22825,19020,16303,36214,18107,12071,9053,7242,6035,5173]
如果要将其作为字符串列表传递,请使用read
函数执行转换。像这样:
*Main> let y = ["3123","11254","790","86214","114125","36214"]
*Main> let x = map read y :: [Int]
*Main> x
[3123,11254,790,86214,114125,36214]
或者@bheklir说你可以使用readMaybe
来安全地转换它们。
答案 1 :(得分:0)
你正在传递一个字符串。请使用
create_list_of_lists [3123,11254,790,86214,114125,36214] 7
此外,您可以将read
用于预期目的
let create_list_of_lists (x:xs) num = [read x `div`z | x <- xs, z <- [1..num]]
http://hackage.haskell.org/package/base-4.7.0.1/docs/Text-Read.html