Sample LA: Tracing

Trace the execution of a Racket program using a substitutive model of computation.

Consider the following procedure definitions.

(define f
  (lambda (x y)
    (string-append x "-" (string-reverse x))))

(define g
  (lambda (x y)
    (string-append (f x x) " " (f y x)))))

(define h
  (lambda (x y)
    (string-append (g x y) "&" (g y x))))

Using our mental/substitutive model of computation for Racket programs, give a step-by-step evaluation of the following Racket expression.

    (h "foo" "bar")