Visualize a tree: Difference between revisions
Content deleted Content added
→{{header|Python}}: More on pprint. |
Added F# version |
||
Line 173: | Line 173: | ||
| `-- (null) |
| `-- (null) |
||
`-- (null)</pre> |
`-- (null)</pre> |
||
=={{header|F_Sharp|F#}}== |
|||
<lang fsharp>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")</lang> |
|||
{{out}} |
|||
<pre>root |
|||
├─a |
|||
│ └─a1 |
|||
│ ├─a11 |
|||
│ └─a12 |
|||
└─b |
|||
└─b1</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |