我已经开始在 Coursera 上学习 Scala 并且有一些关于squareRootGuess
实现的问题如下
我正在尝试实施标准来过滤sqrtGuess
定义中的准确猜测,如下所示,但它给了我堆栈溢出错误。
def sqrtGuess(x: Double): Stream[Double] = {
def nextGuess(guess: Double): Double = (guess + x / guess)/2
def isSufficient(guess: Double): Boolean = math.abs(x - guess*guess)/x < 0.001
def guesses: Stream[Double] =
1 #:: guesses.map(nextGuess).filter(isSufficient)
guesses
}
但是,如果我们在外部定义 isSufficientsqrtGuess
并应用于sqrtGuess
流,则效果很好。
def sqrtGuess(x: Double): Stream[Double] = {
def nextGuess(guess: Double): Double = (guess + x / guess)/2
def guesses: Stream[Double] =
1 #:: guesses.map(nextGuess)
guesses
}
def isSufficient(guess: Double, x: Double): Boolean = math.abs(x - guess*guess)/x < 0.001
sqrtGuess(4.2).filter(isSufficient(_, 4.2)).take(10).toList
我想知道在第一次实施中会发生什么sqrtGuess
?我正在尝试使用替换模型来证明它,但它似乎没有任何问题。