.gitignore
[prop.git] / tools / demos / tree.pcc
blob990e47358277b3e2fddb81fc2e5f5cd61e7ae4f0
1 #include <iostream.h>
2 #include <AD/strings/string.h>
4 //
5 //  A simple datatype to test the `class' keyword in datatype declaration.
6 //  The keyword is necessary since the constructor for node() must
7 //  have type
8 //
9 //      Tree node (Tree, const String&, Tree);   
11 //                     NOT
13 //      Tree node (Tree, String, Tree);
15 datatype Tree = empty 
16               | leaf (const int) 
17               | node (Tree, class String, Tree)
18               ;
20 ostream& operator << (ostream& out, Tree t)
21 {  match (t) {
22       case empty:       return out << "X";
23       case leaf(i):     return out << '[' << i << ']';
24       case node(a,s,b): return out << s << '(' << a << ',' << b << ')';
25    }
28 int main()
30    Tree t = node(leaf(1), "Weasel", node(leaf(2), "Skunk", empty));
31    cout << t << endl;