Question 3: 12 points =============================================== Consider the following fragment of an interpreter written in Scheme: (if-exp (exp1 exp2 exp3) (let ((val1 (value-of exp1 env))) (if (expval->bool val1) (value-of exp2 env) (value-of exp3 env)))) Answer the following questions: 1. In which context does this fragment appear? In which other expressions is it contained? 2. What kind of language construct is evaluated? 3. List the free variables in this expression. 4. Explain informally the meaning of the free variables in the context of the interpreter.