如何使用F#从给定数据创建树

时间:2011-04-13 10:16:07

标签: f# tree

有人可以教我如何使用F#从给定数据创建树吗?例如:数字列表或城市名称列表等。我没有任何线索如何在F#中制作树,需要帮助:)

例如: 输入来自运行时,假设它来自文本文件:城市列表名称

输出结果:graph

2 个答案:

答案 0 :(得分:5)

维基百科有list种常见方式表示图形数据,如果您尝试从文件加载图形数据,它可以帮助您。加载数据search Stack Overflow后。树中的实现有很多问题。这里有几个。

答案 1 :(得分:2)

一种可能的解决方案是使用Discriminated Unions来表示您的数据(在您的案例中为城市或数字)。问题是,你还需要知道你想要表达的城市之间的关系。

e.g。你可以表达你的城市或“最近邻城”或“按公民数量排序”的“字母顺序”关系。正如您所说,您的输入只是一个城市名称列表,我假设您希望树按字母顺序排列您的城市(即表示“字母排序”关系),在这种情况下,一个解决方案可能是:

let cities = ["Munich"; "Rome"; "Florence"; "Berlin"; "Paris"; "Marseille"]

type Tree<'A> =
| Node of Tree<'A> * 'A * Tree<'A>
| Leaf

let rec insert tree element = 
    match element, tree with
    | x, Leaf                    -> Node(Leaf, x, Leaf)
    | x, Node(l,y,r) when x <= y -> Node((insert l x), y, r)
    | x, Node(l,y,r) when x >  y -> Node(l, y, (insert r x))

let rec flatten = function
| Leaf        -> []
| Node(l,x,r) -> flatten l @ [x] @ flatten r

let sort xs = xs |> List.fold insert Leaf
                 |> flatten


let cityTree     = List.fold insert Leaf cities
let sortedCities = sort cities