anchor.diff:              (prevCentroids, newCentroids))
           |> Seq.skip(1)
           |> Seq.filter(fun (prevCentroids, newCentroids) ->
  -            checkDone prevCentroids newCentroids dimRanges)
  +            not (changeOverThreshold prevCentroids newCentroids dimRanges))
           |> Seq.head
           |> ignore
   
   
  -    printfn "All done."; System.Console.ReadKey() |> ignore
  -    0
  +    // Funkier
  +    let takeWhileChanging changeOverThreshold sequence  =
  +        sequence 
  +        |> Seq.pairwise
  +        |> Seq.takeWhile changeOverThreshold
  +        |> Seq.map fst
   
  +    let centroidsProgression = 
  +        randomCentroids 
  +        |> Seq.unfold (fun centroids ->
  +            let clusters = getNewClusters samples centroids
  +            let newCentroids = clusters |> Array.map getNewCentroid
  +            Some((centroids, clusters), newCentroids))
  +        |> takeWhileChanging (fun ((centroids, _), (newCentroids, _)) ->
  +            changeOverThreshold centroids newCentroids dimRanges)
   
  +    let printResults centroidsProgression =
  +        centroidsProgression
  +        |> Seq.iteri (fun iteration (centroids, clusters) ->
  +            printfn ""
  +            clusters |> Seq.iter displayCluster 
  +            printfn "Completed cycle:  %d" (iteration + 1)
  +            printfn "====================")
  +
  +    printResults centroidsProgression
  +
  +    // Funkiest?
  +    let callWhileChanging intitialValue getNextValue changeOverThreshold =
  +        intitialValue |> Seq.unfold (fun value ->
  +            let nextValue = getNextValue value
  +            match changeOverThreshold value nextValue with
  +                | true -> Some(nextValue, nextValue)
  +                | false -> None)
  +    
  +    let initial = (randomCentroids, getNewClusters samples randomCentroids)
  +    let getNext (centroids, clusters) =
  +        let newCentroids = clusters |> Array.map getNewCentroid
  +        (newCentroids, getNewClusters samples newCentroids)
  +    let centroidsProgression =
  +        callWhileChanging initial getNext (fun (prevCentroids, _) (centroids, _) ->
  +            changeOverThreshold prevCentroids centroids dimRanges)
  +        
  +    printResults centroidsProgression
  +    printfn "Done."
  +    Console.ReadKey() |> ignore
  +    0
positive.code:     ((Array.empty, randomCentroids), seq{1..1000})
          ||> Seq.scan(fun (_, prevCentroids) count ->
              printfn ""
              let clusters  = getNewClusters samples prevCentroids
              clusters |> Array.iter displayCluster
              let newCentroids = clusters |> Array.map getNewCentroid 
              printfn "Completed cycle:  %d" count
  
negative.code:         let clusters  = getNewClusters samples centroids
          clusters |> Array.iter displayCluster
          let newCentroids = clusters |> Array.map getNewCentroid
          keepGoing <- changeOverThreshold centroids newCentroids dimRanges
          centroids <- newCentroids
          count <- count + 1
          printfn "Completed cycle:  %d" count
  