(define-struct s (args body f)) (define-syntax def (syntax-rules () ((d name args body ...) (define name (make-s 'args '(body ...) #f))))) (define (act an-s) (set-s-f! an-s (eval `(lambda ,(s-args an-s) ,@(s-body an-s))))) (define (app an-s . args) (apply (s-f an-s) args)) (define (my-f3 x) (* x x)) (def t1 (x) (* x x)) (act t1) (printf "(app(t1 2) = ~a~n" (app t1 2)) (define (my-f2 x) (* x x)) (def t2 (x) (my-f2 x)) (act t2) (printf "(my-f2 2) = ~a~n" (my-f2 2)) (printf "(app(t2 2) = ~a~n" (app t2 2)) (def t3 (x) (my-f3 x)) (act t3) (printf "(my-f3 2) = ~a~n" (my-f3 2)) (printf "(app(t3 2) = ~a~n" (app t3 2))