【发布时间】:2016-04-06 08:05:22
【问题描述】:
我有一个评论线程列表形式的递归数据结构。每个评论可以包含零个或多个回复 (cmets),每个回复可以包含零个或多个回复。我正在尝试编写一个函数来展平此评论线程列表,即给定评论线程列表,所有 cmets 都应作为“顶级” cmets 返回而没有任何回复。我为此编写了一个函数,但它不起作用,它将返回一个空列表。
type Comment =
{ Text : string
Score : int
Replies : Comment list }
let flattenReplies ({ Comments = cs }) =
let rec flatten st =
match st with
| [] ->
st
| hd::tl ->
{ hd with Replies = [] }
:: tl
|> List.collect (fun c -> flatten c.Replies)
cs
|> Seq.toList
|> flatten
【问题讨论】: