Scala中的递归和“右侧”

时间:2014-01-09 11:49:50

标签: scala recursion

我在Scala中看到了以下函数:

def sqrtIter(guess: Double, x: Double): Double =
    if (isGoodEnough(guess, x)) guess
    else sqrtIter(improve(guess, x), x)

解释:

  

请注意,sqrtIter是递归的,右侧自称

有人可以在这里解释“右手边”的意思吗?

2 个答案:

答案 0 :(得分:5)

右侧(rhs)和左侧(lhs)是常用词,用于描述由分隔符分隔的边。

对于Scala,分隔符号是等号。这意味着lhs总是指定一个定义,比如

def sqrtIter(guess: Double, x: Double): Double

而rhs总是指定实现,比如

if (isGoodEnough(guess, x)) guess
else sqrtIter(improve(guess, x), x)

最后lhs,rhs和分隔符符号形成整个语句:

<lhs> = <rhs>

答案 1 :(得分:0)

之所以这样,是因为要计算该返回类型,Scala编译器必须在右侧查看,并且由于square-root-Iter函数是递归的,因此需要将其堆叠在一个循环中。要打破这种循环,我们要求递归函数始终具有 explicit 返回类型。