在Haskell中创建列表列表

时间:2014-11-17 14:34:28

标签: haskell

我有这个功能来创建一个列表列表,根据我实现的一些规则,但它给我一个恼人的错误,我无法理解如何修复。

以下是它收到的清单:

["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

我收到了这个错误:

run_function

我做错了什么?

2 个答案:

答案 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