Tech: "Tying the knot" professianality = Stream[Stream[...]] professianality = {x: Stream(over x/y); y:Stream(over x/y)}

Advanced Scala Chapters: Streams

Example #1: Simple Period

object Demo extends App {
  def sieve(s: Stream[Int]): Stream[Int] =
    s.head #:: sieve (s.tail filter (_ % s.head != 0))
  sieve (Stream.from(2)) take 10 foreach println
}

Example #2: Fibonacci

// >> 0 1 1 2 3 5 8 13 21 34
object Demo01_fib extends App {
  val fib: Stream[Int] =
    0 #:: 1 #:: ((fib zip fib.tail) map {case (a, b) => a + b})

  println((fib take 10).foldLeft("")(_ + " " + _))
}

Example #3: Sieve of Erathosphenes

object Demo extends App {
  def sieve(s: Stream[Int]): Stream[Int] =
    s.head #:: sieve (s.tail filter (_ % s.head != 0))
  sieve (Stream.from(2)) take 10 foreach println
}

Example #4: Paskal Triangle

object Demo extends App {
  def sieve(s: Stream[Int]): Stream[Int] =
    s.head #:: sieve (s.tail filter (_ % s.head != 0))
  sieve (Stream.from(2)) take 10 foreach println
}

Example #5: SQRT Stream

object Demo extends App {
  def sieve(s: Stream[Int]): Stream[Int] =
    s.head #:: sieve (s.tail filter (_ % s.head != 0))
  sieve (Stream.from(2)) take 10 foreach println
}