有人可以教我如何使用F#从给定数据创建树吗?例如:数字列表或城市名称列表等。我没有任何线索如何在F#中制作树,需要帮助:)
例如: 输入来自运行时,假设它来自文本文件:城市列表名称
输出结果:graph
答案 0 :(得分:5)
答案 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