variantでtree
なんとなく、実験。
using System; variant Tree ['t] where 't : IComparable { | Node { left : Tree ['t]; elem : 't; right : Tree ['t]; } | Null } class Program { static Insert ['t] (tree : Tree ['t], e : 't) : Tree ['t] where 't : IComparable { match (tree) { | Tree.Node (left, elem, right) => if (elem.CompareTo (e) > 0) Tree.Node (Insert (left, e), elem, right) else if (elem.CompareTo (e) < 0) Tree.Node (left, elem, Insert (right, e)) else tree | Tree.Null => Tree.Node (Tree.Null (), e, Tree.Null ()) } } static Travers ['t] (tree : Tree ['t]) : void where 't : IComparable { match (tree) { | Tree.Node (left, elem, right) => Travers (left); Console.WriteLine (elem); Travers (right); | Tree.Null => (); } } static Main () : void { mutable r = Tree.Null (); Travers (Insert(Insert(Insert(Insert (r, 30), 10), 20),5)); } } /* 5 10 20 30 */