// test "val foo =" clauses in for comprehensions // $Id$ import scala.collection.immutable.Queue import scala.{List=>L} object Test { // redefine some symbols to make it extra hard /* class List class Pair class Tuple2 def List[A](as:A*) = 5 */ def firstDigit(x:int): int = x match { case 0 => 0 case _ if(x<0) => firstDigit(-x) case _ if(x<10) => x case _ => firstDigit(x / 10) } { // a basic test case val input = L.range(0,20) val oddFirstTimesTwo = for{val x <- input val xf = firstDigit(x) xf % 2 == 1} yield x*2 Console.println(oddFirstTimesTwo) } { // make sure it works on non-Ls // val input: Queue = Queue.Empty[int].incl(L.range(0,20)) val input = L.range(0,20).elements val oddFirstTimesTwo = for{val x <- input val xf = firstDigit(x) xf % 2 == 1} yield x*2 Console.println(oddFirstTimesTwo.toL) } { // yield the computed value val input = L.range(0,20) val oddFirstTimesTwo = for{val x <- input val xf = firstDigit(x) xf % 2 == 1} yield xf*2 Console.println(oddFirstTimesTwo) } { // make sure the function is only called once var count: int = 0 def fdct(x: int) = { count = count + 1 firstDigit(x) } val input = L.range(0,20) for{val x <- input val xf = fdct(x) xf % 2 == 1} yield xf Console.println("called " + count + " times") } def main(args: Array[String]): Unit = () }