Visualize a tree: Difference between revisions
Content added Content deleted
m (→Functional composition: Adjusted type comments (Node contents don't have to be strings)) |
|||
Line 534: | Line 534: | ||
`-- (null)</pre> |
`-- (null)</pre> |
||
=={{header|Elena}}== |
=={{header|Elena}}== |
||
ELENA |
ELENA 4.x : |
||
<lang elena>/// a program to produce a visual representation of some tree. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
class Node |
class Node |
||
{ |
{ |
||
string theValue; |
|||
Node[] theChildren; |
|||
constructor |
constructor new(string value, Node[] children) |
||
{ |
|||
theValue := value |
theValue := value; |
||
theChildren := |
theChildren := children; |
||
} |
|||
constructor |
constructor new(string value) |
||
<= |
<= new(value, new Node[](0)); |
||
constructor children |
constructor new(Node[] children) |
||
<= |
<= new(emptyString, children); |
||
⚫ | |||
constructor name : value child:child |
|||
<= name:value children(Array single:child). |
|||
⚫ | |||
Children = theChildren; |
|||
} |
} |
||
extension treeOp |
extension treeOp |
||
{ |
{ |
||
writeTree(node,prefix) |
writeTree(node, prefix) |
||
{ |
|||
var children := node |
var children := node.Children; |
||
var length := children |
var length := children.Length; |
||
children |
children.zipForEach(new Range(1, length), (child,index) |
||
{ |
|||
self |
self.printLine(prefix,"|"); |
||
self |
self.printLine(prefix,"+---",child.get()); |
||
var nodeLine := prefix + (index==length)iif(" ","| ") |
var nodeLine := prefix + (index==length).iif(" ","| "); |
||
self |
self.writeTree(child,nodeLine); |
||
}); |
|||
^ self |
^ self |
||
} |
|||
writeTree(node) |
writeTree(node) |
||
= self |
= self.writeTree(node,""); |
||
} |
} |
||
public program |
public program() |
||
{ |
|||
[ |
|||
var tree := Node |
var tree := Node.new( |
||
new Node[]{ |
|||
Node |
Node.new("a", new Node[] |
||
{ |
|||
Node |
Node.new("b", new Node[]{Node.new("c")}), |
||
Node |
Node.new("d") |
||
), |
}), |
||
Node |
Node.new("e") |
||
) |
}); |
||
console |
console.writeTree(tree).readChar() |
||
}</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |