Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
31
Task/Visualize-a-tree/F-Sharp/visualize-a-tree.fs
Normal file
31
Task/Visualize-a-tree/F-Sharp/visualize-a-tree.fs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
type tree =
|
||||
| T of string * tree list
|
||||
|
||||
let prefMid = seq { yield "├─"; while true do yield "│ " }
|
||||
let prefEnd = seq { yield "└─"; while true do yield " " }
|
||||
let prefNone = seq { while true do yield "" }
|
||||
|
||||
let c2 x y = Seq.map2 (fun u v -> String.concat "" [u; v]) x y
|
||||
|
||||
let rec visualize (T(label, children)) pre =
|
||||
seq {
|
||||
yield (Seq.head pre) + label
|
||||
if children <> [] then
|
||||
let preRest = Seq.skip 1 pre
|
||||
let last = Seq.last (List.toSeq children)
|
||||
for e in children do
|
||||
if e = last then yield! visualize e (c2 preRest prefEnd)
|
||||
else yield! visualize e (c2 preRest prefMid)
|
||||
}
|
||||
|
||||
let example =
|
||||
T ("root",
|
||||
[T ("a",
|
||||
[T ("a1",
|
||||
[T ("a11", []);
|
||||
T ("a12", []) ]) ]);
|
||||
T ("b",
|
||||
[T ("b1", []) ]) ])
|
||||
|
||||
visualize example prefNone
|
||||
|> Seq.iter (printfn "%s")
|
||||
Loading…
Add table
Add a link
Reference in a new issue