anchor.diff:      { 
         init: string -> unit; 
         step: int -> int -> int -> ('a * double) -> unit;  // Step#, Rule index, Rules#, NodeCost
  -      finish: ('a * double) list -> ('a * double) -> unit // All NodeCosts, Best NodeCost
  +      finish: int -> ('a * double) -> unit // # of Examined nodes, Best NodeCost
       }
     
     type Logger = string -> unit
  
positive.code:   //if debug then
    //  printfn "random expressions:\n%s\n" (nodesListToString printer (List.rev revertedResult))
    let best = List.minBy snd revertedResult
    reporter.finish revertedResult best
    best
  
  exception CurrentListReturn of (double) list
  
negative.code:     currentLevelNodes.UnionWith(nextLevelNodes)
  
    let best = allNodes |> Seq.minBy costModel
    let bestWithCost = best, costModel best
  
    reporter.finish (allNodes |> Seq.length) bestWithCost
  
    bestWithCost
  
  
  (* Beam Search Algorithm *)
  