let rec string_of_funct_novar = function
    | Id(x) -> ""
    | Lambda(l) -> sprint "%g" l
    | Sin(Id(_)) -> "sin"
    | Cos(Id(_)) -> "cos"
    | Exp(Id(_)) -> "exp"
    | Ln(Id(_)) -> "ln"
    | Sin(f) -> sprint "sin(%s)" (string_of_funct_novar f)
    | Cos(f) -> sprint "cos(%s)" (string_of_funct_novar f)
    | Exp(f) -> sprint "exp(%s)" (string_of_funct_novar f)
    | Ln(f) -> sprint "ln(%s)" (string_of_funct_novar f)
    | Prod(Lambda(0.), g) -> "0"
    | Prod(Lambda(1.), g) -> (string_of_funct_novar g)
    | Prod(Lambda(-1.), g) -> sprint "-(%s)" (string_of_funct_novar g)
    | Prod(Lambda(l), g) -> sprint "%g(%s)" l (string_of_funct_novar g)
    | Prod(f,g) -> sprint "(%s).(%s)" (string_of_funct_novar f) (string_of_funct_novar g)
    | Inv(f) -> sprint "(1/(%s))" (string_of_funct_novar f)
    | Sum(f,g) -> sprint "(%s) + (%s)" (string_of_funct_novar f) (string_of_funct_novar g)
    | Power(f,0) -> "1"
    | Power(f,1) -> (string_of_funct_novar f)
    | Power(f,-1) -> sprint "(1/(%s))" (string_of_funct_novar f)
    | Power(f,n) when n<0 -> sprint "(%s)^(%i)" (string_of_funct_novar f) n
    | Power(f,n) -> sprint "(%s)^%i" (string_of_funct_novar f) n
    | Comp(f,g) -> sprint "%s(%s)" (string_of_funct_novar f) (string_of_funct_novar g)
    | Unknown(s) -> s
GA|Analytics