Task

Create a function, compose,   whose two arguments   f   and   g,   are both functions with one argument.



The result of compose is to be a function of one argument, (lets call the argument   x),   which works like applying function    f    to the result of applying function    g    to    x.



Example

 compose(f, g) (x) = f(g(x))



Reference: Function composition

Hint: In some languages, implementing compose correctly requires creating a closure.




compose_i(,,)
{
    ($0)(($1)($2));
}
 
compose(,)
{
    compose_i.apply($0, $1);
}
 
double(real a)
{
    2 * a;
}
 
square(real a)
{
    a * a;
}
 
main(void)
{
    o_(compose(square, double)(40), "\n");
 
    0;
}