import scala.math._
import scala.annotation.tailrec

object os{

  def sum(bInf: Int, bSup : Int, f : Int => Int ) : Int = {
    if(bInf > bSup){0}else{f(bInf)+ sum(bInf + 1, bSup, f)}
  }

  def sum2[A](bInf: Int, bSup : Int, f : Int => A, add:(A,A) => A) : A = {
    if(bInf == bSup){f(bSup)}else{add(f(bInf), sum2(bInf + 1, bSup, f, add))}
  }

  def add(a : Int, b : Int) = a+b
  def addCurry(a : Int) (b : Int) : Int = a+b
// pour currifier -> (sum2 _).curried

  def incr(x:Int) = x+1
  def square(x:Int) = x * x

  def compose ( f : Int => Int, g : Int => Int ) : Int => Int ={
    x => f(g(x))
  }





  def main(args: Array[String]): Unit = {
/*    println("Euler rec")
    println(Math.sqrt(6*EulerRec(5000)))
    println("Euler rec Term")
    println(Math.sqrt(6*EulerRecT(50000,0)))
*/
    println( compose(incr,square) (2) )
  }

}
