object week10 with Application  {

  ///////////////////// Exercice 1 //////////////////////////

  // COMPLETER ICI: definir la somme de deux flots d'entiers.

  // COMPLETER ICI: definir le flot des elements de la suite de Fibonacci.

  // COMPLETER ICI: tester.
  

  ///////////////////// Exercice 2 //////////////////////////

  def partialSums(s: Stream[double]): Stream[double] =
    Stream.cons(s.head, partialSums(s.tail) map { x => x + s.head });
  
  def eulerTransform(s: Stream[double]): Stream[double] = {
    val s0 = s at 0;
    val s1 = s at 1;
    val s2 = s at 2;
    Stream.cons(s2 - ((s2 - s1) * (s2 - s1)) / (s0 - 2*s1 + s2),
                eulerTransform(s.tail))
  }

  def tableau(transform: Stream[double] => Stream[double], s: Stream[double])
  : Stream[Stream[double]] =
    Stream.cons(s, tableau(transform, transform(s)));

  // COMPLETER ICI: definir le flot des elements de la suite alternante de ln(2).

  // COMPLETER ICI: definir le flot des sommes partielles de la suite alternante de ln(2).

  // COMPLETER ICI: accelerer le flot precedent par la methode des tableaux d'Euler.

  // COMPLETER ICI: tester.

  ///////////////////// Exercice 3 //////////////////////////

  // COMPLETER ICI: definir l'iterateur representant tous les entiers plus grand qu'un entier donne.

  // COMPLETER ICI: definir l'iterateur representant les nombres premiers.
  
  // COMPLETER ICI: tester.
}
