2017-02-09 60 views
-3

嗨我是新来斯卡拉,我不knowe我在做什么wrrong得到正确的典型成收声明:斯卡拉初学者的,内涵和功能

def prim(n:Int): (Boolean, List[Int]) = divsers(n) -> List(1,n) //flatMap for-comprehensions 

def divsers(n:Int):Boolean= 
(for{ 
    d <- 1 to n 
    if((n%d)->0) 
    }yield(d) // <- what i need to put here to make it work with the function prim? 
) 
prim(11); 

我只是想测试一个数字是一个素数。我真的不得不说,我真的得到了syntac和typs的问题。即使我在yield中只是“真”,它不工作?

+0

我不知道为什么有人给我-1?你不需要写出这些问题,但只是给我一个小费来解决这个问题。也许是一个链接。 – thenewOne1234567890

回答

3

你正在做各种毫无意义的事情。

divsers(n) -> List(1,n)返回一个元组是谁的第二个元素是一个列表2 Int s?第一个Int始终是1,第二个Int始终是作为参数传递给prim()的数字。

if((n%d)->0)您已经在这里创建了另一个元组。你可能的意思是说if (n%d) > 0

yield ?for理解正在穿过从1n的一系列数字。其中一些将通过您的if条件,有些则不会。现在你已经有了一个新的数字列表。你应该如何将它变成Boolean取决于你。

+0

好吧,我删除了没有意义的部分(我正在翻译伪码到scala)。但我仍然不理解最后一部分。我知道一些序列正在通过if条件。但我怎么能得到这个谁通过if条件。我认为这个列表将是变量'd'。最后我会这样做,让他们成为可乐(d> 0)。它仍然没有工作:(但谢谢你的帮助 – thenewOne1234567890

+1

如果你这样做'val nums = for {...} yield d'那么你有一个变量'nums',所有的数字通过'if' test。然后,您可以测试_that_列表以查找您要查找的任何条件。 – jwvh