anchor.diff:      dataEntr-partDataEntr
   
   type TreeNode<'T, 'U> = 
  -        |Category of ('T -> 'U)
  +        |Category of 'U
           |Node of ('T -> obj) * (obj * TreeNode<'T, 'U>) list
  -type Tree<'T, 'U> = TreeNode<'T, 'U>
  +
  +type Tree<'T, 'U> = |Root of TreeNode<'T, 'U>
   
   let classify (datum:'T) (tree:Tree<'T, 'U>) = 
       let rec chooseNode (selector:('T -> obj)) (nodes:( obj * TreeNode<'T, 'U>) list) =
  
positive.code: 
      let rec classifyInt (node:TreeNode<'T, 'U>) =
          match node with
          | Category(categorySelector) -> categorySelector datum
          | Node(selector, nodes) -> match chooseNode selector nodes with
                                     | Some(node) -> classifyInt node
                                     | None -> failwith "no node"
  
      let value = classifyInt tree
      value
  
  //let trainID3 (data: 'T seq) (categorySelector:'T -> 'U) (features: seq<'T -> obj>) = 
      
  
  
negative.code: module DecisionTrees﻿
  
  // https://en.wikipedia.org/wiki/ID3_algorithm
  // http://stackoverflow.com/questions/1418829/help-needed-creating-a-binary-tree-given-truth-table
  // https://blogs.msdn.microsoft.com/chrsmith/2009/10/31/awesome-f-decision-trees-part-i/
  // http://clear-lines.com/blog/post/Decision-Tree-classification.aspx
  
  let private entropyInternal (categorySelector:'T -> 'U) (data:'T seq) =
      let log2 x = System.Math.Log(x, 2.0)
  