无法使此有理数之和起作用(Scala)

无法使此有理数之和起作用(Scala),scala,Scala,好的,我试着在网上找到的一张幻灯片中做这个例子。但是我有点迷路了。这是问题的扫描图 ! 很抱歉,它还不允许我使用图像链接,所以我从我的photobucket中添加了一个指向问题的链接 现在我想,这可能和我在网上找到的整数和的例子一样简单,并插入有理数 def sum (f: Rational => Rational)( b: Rational): Rational = { if (b > new Rational(0,1)) new Rationa

好的,我试着在网上找到的一张幻灯片中做这个例子。但是我有点迷路了。这是问题的扫描图

!

很抱歉,它还不允许我使用图像链接,所以我从我的photobucket中添加了一个指向问题的链接

现在我想,这可能和我在网上找到的整数和的例子一样简单,并插入有理数

def sum (f: Rational => Rational)( b: Rational): Rational = {  

    if (b > new Rational(0,1))  

        new Rational(0,1)  

    else  

        f(b) + sum(f)(b + new Rational(1, 1))  


}  

我明白了,但这显然是错误的,没有做问题所要求的。所以现在我对如何进行这项工作感到困惑,你不需要递归,你可以用for进行迭代。比如:

val db = b.den
val partials = for {
  dk <- 2 to db
  nk <- 1 until dk
} yield f(Rational(nk, dk)
partials.sum

你所写的显然与幻灯片上的算法无关。你需要得到分子和分母,并在组合中调用f。你会怎么做?正如保罗所说,你试过测试它吗?在您的图像中,它表示对于b=3/4,它应该返回f1/2+…+,但是您的代码返回0,而不是递归,因为3/4>0/1。我确实测试了它,得到了错误的答案,我想尝试添加打印语句,以查看每个部分是如何使用的。但我不知道该怎么说。我尝试添加的每一条print语句都会被标记为错误。代码块的最后一条语句是该块的返回值。打印的是Unit类型,这不是一个有理数。您可以在if/else的每个分支中放置prnit,只要您用{}包装整个块,而不是将它们作为块的最后一行。最好用家庭作业标记标记家庭作业。我有点限制使用def sum f:Rational=>Rational b:Rational:Rational。因为它说我必须使用lol。但我知道这是多么容易。这是你需要定义的求和函数的主体,我只是省略了声明^_^