alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (forvaleq.scala)

This example Scala source code file (forvaleq.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

a, array, array, int, int, list, list, test, test, tuple2

The Scala forvaleq.scala source code

// test "foo = expr" clauses in for comprehensions

import scala.collection.immutable.Queue
import scala.{List=>L}
  
object Test {
  // redefine some symbols to make it extra hard
  class List
  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 {x <- input
           xf = firstDigit(x)
           if xf % 2 == 1}
        yield x*2
    println(oddFirstTimesTwo)
  }

  {
    // a test case with patterns
    
    val input = L.range(0, 20)
    val oddFirstTimesTwo =
      for {x <- input
           xf = firstDigit(x)
           yf = x - firstDigit(x) / 10
           (a, b) = (xf - yf, xf + yf)
           if xf % 2 == 1}
        yield a + b
    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).iterator
    val oddFirstTimesTwo =
      for {x <- input
          xf = firstDigit(x)
          if xf % 2 == 1}
        yield x*2
    println(oddFirstTimesTwo.toList)    
  }
  
  {
    // yield the computed value
    
    val input = L.range(0,20)
    val oddFirstTimesTwo =
      for {x <- input
          xf = firstDigit(x)
          if xf % 2 == 1}
        yield xf*2
    println(oddFirstTimesTwo)    
  }

  {
    // make sure the function is only called once
    var count: Int = 0
    
    def fdct(x: Int) = {
      count += 1
      firstDigit(x)
    }
    
    val input = L.range(0,20)
    for {x <- input
         xf = fdct(x)
         if xf % 2 == 1}
      yield xf
      
    println("called " + count + " times")
  }

  def main(args: Array[String]) {}
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala forvaleq.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.