我目前正在使用以下功能:
let rec combine xss = function
| [] -> []
| ys::yss -> List.map ((@) ys) xss @ combine xss yss
它以下列方式组合了两个列表列表:
combine [["x"];["a"];["c"]] [["u"];["h"];["p"]]
给出了这个结果:
[["u"; "x"]; ["u"; "a"]; ["u"; "c"]; ["h"; "x"]; ["h"; "a"]; ["h"; "c"];
["p"; "x"]; ["p"; "a"]; ["p"; "c"]]
这完全是我想要的,但是..我目前正在使用这种方法,而且数据已经变得如此巨大,以至于程序目前无法运行。
有没有办法快速运行列表列表?列表包含大约1100个元素,里面的列表每个包含大约10个元素。只是加快一点速度!
编辑:
上面列出的示例可能不太好,只是为了展示它正在做什么。我实际使用的数据结合了这种预定义类型的列表列表:
type atom = ANum of float | AExponent of string * int
| ADiv of atom list list * atom list list | ARoot of expr * int
此处使用的expr
类型对组合方法不感兴趣。
特别是在我的代码中,我可能会做一些像(在比赛中)一样糟糕的事情:
| ADiv(all3,all4) -> ADiv((combine all2 all3)@(combine all1 all4),combine all2 all4)
allx
为上述类型的atom list list
。
这有什么解释呢?