我正在尝试解决 F# 中 99 个 Haskell 问题的任务。任务 #7 看起来很简单,并且可以在很多地方找到解决方案。除了我通过谷歌搜索尝试并找到的前几个解决方案(例如https://github.com/paks/99-FSharp-Problems/blob/master/P01to10/Solutions.fs)是错误的。
我的例子很简单。我正在尝试构建非常深的嵌套结构并将其折叠
type NestedList<'a> =
| Elem of 'a
| NestedList of NestedList<'a> list
let flatten list =
//
(* StackOverflowException
| Elem(a) as i -> [a]
| NestedList(nest) -> nest |> Seq.map myFlatten |> List.concat
*)
// Both are failed with stackoverflowexception too https://github.com/paks/99-FSharp-Problems/blob/master/P01to10/Solutions.fs
let insideGen count =
let rec insideGen' count agg =
match count with
| 0 -> agg
| _ ->
insideGen' (count-1) (NestedList([Elem(count); agg]))
insideGen' count (Elem(-1))
let z = insideGen 50000
let res = flatten z
我试图以 CPS 风格重写解决方案,但是我做错了什么或寻找不正确的方向 - 我尝试过的一切都不起作用。
有什么建议吗?
ps Haskell 解决方案,至少在具有 50000 个嵌套级别的嵌套结构上工作缓慢,但没有堆栈溢出。