Lambda 在F#中,如何将一个连续体列表转换为一个包含列表的连续体?

Lambda 在F#中,如何将一个连续体列表转换为一个包含列表的连续体?,lambda,f#,functional-programming,continuations,continuation-passing,Lambda,F#,Functional Programming,Continuations,Continuation Passing,首先是一些上下文:我正在玩来自的KFoldTree。我有一个n元而不是二进制的树结构。对于二叉树,将CPS变换应用于传递给KFoldTree的函数并不难。你最终会得到这样的结果: kleft (fun left -> kright (fun right -> k (dosomethingwith left right))) n元树的问题是,您必须动态地构建这个连续链。你想要的结果应该是这样的: kchildren (fun children -> k (dosomething

首先是一些上下文:我正在玩来自的
KFoldTree
。我有一个n元而不是二进制的树结构。对于二叉树,将CPS变换应用于传递给
KFoldTree
的函数并不难。你最终会得到这样的结果:

kleft (fun left -> kright (fun right -> k (dosomethingwith left right)))
n元树的问题是,您必须动态地构建这个连续链。你想要的结果应该是这样的:

kchildren (fun children -> k (dosomethingwith children))
其中
children
是折叠结果类型的列表。例如,如果我正在编写一台漂亮的打印机,
子项
应为
字符串列表
类型,而
kchildren
应为
(字符串列表->字符串)->字符串
类型


那么,在给定
((节点->字符串)->字符串)列表的情况下,我们如何定义一个生成
kchildren
的函数呢

let chain continuations cont =
    let rec loop acc =
        function
        | k::ks -> k (fun x -> loop (x::acc) ks)
        | [] -> cont acc
    // Reverse the input list to preserve original left-to-right order.
    List.rev continuations |> loop []
有更好的办法吗