anchor.diff:    
     let completeReporter<'a> (printer: 'a -> string) (logger: Logger) =
       { init = fun msg -> logger msg;
  -      step = fun stp ruleIdx (node, cost) -> logger (sprintf "Step %d, rule %d: %s" stp ruleIdx (nodeCostToString printer node cost))
  +      step = fun stp ruleIdx rulesSize (node, cost) -> logger (sprintf "Step %d, rule %d out of %d: %s" stp ruleIdx rulesSize (nodeCostToString printer node cost))
         finish = fun allPrograms (node, cost) -> logger (sprintf "examined programs: %d\nBest: %s" (List.length allPrograms) (nodeCostToString printer node cost))
       }
   
  
positive.code:           raise (CurrentListReturn (acc |> List.map snd))
          else 
            let (index, bestChild, bestChildCost) = childNodes |> List.mapi (fun idx n -> idx, n, costModel n) |> List.minBy (fun (_,_,c) -> c)
            reporter.step cur index (bestChild, bestChildCost)
            if(bestChildCost < currentBestCost) then
              currentBestCost <- bestChildCost
              currentBest <- bestChild
  
negative.code:         
            let randomChild = childNodes.[index]
            let randomChildCost = costModel randomChild
            let delta = randomChildCost - curCost
            reporter.step cur index (childNodes.Length) (randomChild, randomChildCost)
            let (nextChild, nextChildCost) = 
              if(delta < 0.0) then
                if(randomChildCost < currentBestCost) then
                  currentBestCost <- randomChildCost
                  currentBest <- randomChild
                (randomChild, randomChildCost)
              else
                if (rand.NextDouble() < System.Math.Pow(System.Math.E, (-delta) / temprature)) then
                  (randomChild, randomChildCost)
                else
                  (curNode, curCost)
  