2014-10-27 47 views
0

好吧,所以即时尝试在我在网上找到的幻灯片做这个例子。但我有点失落。继承人对问题的扫描无法得到这个合理的工作(斯卡拉)

a link

对不起,它不会让我使用图像链接,所以我把从我的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)) 


} 

一样方便,得到了,但它显然是错误的,并没有做什么的问题在问。所以现在我失去了一个困惑如何去做这个

+1

你写的东西并不明显与幻灯片上的算法相关。你需要得到分子和分母,并在组合上调用f。你会怎么做? – 2014-10-27 07:07:37

+0

正如保罗所说,你是否尝试过测试它?在你的图像中,它表示,对于b = 3/4,它应该返回f(1/2)+ ... +,但是你的代码没有递归返回0,如3/4> 0/1。 – 2014-10-27 09:42:21

+0

我做了测试并得到了错误的答案,我想尝试并添加打印语句以查看每个部分是如何使用的。但我不知道如何把它们。每一次尝试添加一个打印语句被标记为错误。 – 2014-10-27 11:30:46

回答

0

你不需要递归,你可以迭代一个for。类似于:

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

im类型限于使用def sum(f:Rational => Rational)(b:Rational):Rational。因为它说我必须使用那个笑声。但我看到如何更容易 – 2014-10-27 11:33:39

+0

这是你需要定义的总和函数的主体,我只是省略了声明!^_ ^ – 2014-10-27 11:51:24