// Square root, second version (Chapter 4, Scala by Example) // // some defs are nested inside "sqrt" // // simplified nested defs: no local x parameter def abs(x: Double) = if (x > 0.0) x else -x def square(x: Double) = x * x def sqrt(x: Double) = { def improve(guess: Double): Double = (guess + x / guess) / 2 def isGoodEnough(guess: Double): Boolean = abs( square(guess) - x) < 0.001 def sqrtIter(guess: Double): Double = { println( guess ); if ( isGoodEnough(guess)) guess else sqrtIter(improve(guess)) } if (x < 0.0) error("cannot compute sqrt for negative values " + x) sqrtIter(1.0) }