【发布时间】:2020-12-27 05:07:56
【问题描述】:
我已经开始在 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
}
但如果我们在 sqrtGuess 之外定义 isSufficient 并将其应用于 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 的第一个实现会发生什么?我正在尝试使用替换模型来证明它,但它似乎没有任何问题。
【问题讨论】:
标签: scala recursion scala-streams