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.




 
;; By decreasing order of performance
;; 1) user definition : lambda and closure
 
(define (ucompose f g ) (lambda (x) ( f ( g x))))
(ucompose sin cos)
   → (🔒 λ (_x) (f (g _x)))
 
;; 2) built-in compose : lambda
 
(compose sin cos)
   → (λ (_#:g1002) (#apply-compose (#list #cos #sin) _#:g1002))
 
;; 3) compiled composition
 
(define (sincos x) (sin (cos x)))
sincos → (λ (_x) (⭕️ #sin (#cos _x))) 
 