def sumIsPrime(list:List[Int]) = list.flatMap( x => (list map ( y => (x,y) ))) filter{ case (x:Int,y:Int) => (x<y && isPrime(x+y)) }
Scala更抽象化了這個邏輯,模仿了imperative language的for loop,以下的例子可以改寫成for statment:
list filter( x => x>3) map (x => x*x)
for (elem <- list if elem > 3 ) yield elem*elem
在可讀性上是有改進了。
for 的參數包括了 generator-filter sequence:
- generator: pattern <- collection
- predicates: if (...)
for的參數如果用{ } 匡起來,則可以寫成multi-line generators/filter,(否則需要 ; 隔開generators):
for (elem <- list if elem > 3 ) yield elem*elem
或是這個nested loop:
沒有留言:
張貼留言