有人可以教我如何使用F#從給定數據製作樹?例如:數字列表或城市名稱列表等。我沒有任何線索,如何讓樹在F#中,需要幫助這裏:)如何使用F#給定數據製作一棵樹
例如: 輸入是從運行時間,假設它是從一個文本文件:城市列表名稱
輸出結果:圖
有人可以教我如何使用F#從給定數據製作樹?例如:數字列表或城市名稱列表等。我沒有任何線索,如何讓樹在F#中,需要幫助這裏:)如何使用F#給定數據製作一棵樹
例如: 輸入是從運行時間,假設它是從一個文本文件:城市列表名稱
輸出結果:圖
一個可能的解決方案是使用Discriminated Unions來代表你的數據(在你的情況下城市或數字)。問題是,你還需要知道你想表達的城市之間的關係。
例如你可以表達你的城市或「最接近的鄰近城市」或「按公民人數排序」的「按字母排序」的關係。至於你說你的投入僅僅是城市的名單,我假設你想要的樹在這種情況下,命令由字母你的城市(即表達了「按字母順序」的關係)一個解決辦法是:
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
扁平功能的功能是什麼? – 2011-04-18 17:20:13
flatten將樹轉換回列表 – 2011-04-19 06:29:30
的曲線是比樹更一般的數據結構,以便使得問題更爲複雜。無論如何,如果您沒有說出在結果圖/樹中應連接哪個節點(例如城市),則無法回答該問題。 – 2011-04-13 14:07:20