;; Omitting answers for Task 1 from public view Task 2. ======= Correct answer A: No, it is not possible to write a program in the LET language (as extended by Task 1) that gets into an infinite loop and runs forever. The proof is by structural induction on programs: Numbers and variable references terminate with a value or (in the case of an unbound variable) an error. All operations (-, zero?, equal?, greater?, less?, emptylist, cons, car, cdr, null?) terminate with a value or error. If exp1 and exp2 terminate, then let x = exp1 in exp2 terminates. By induction, therefore, all programs terminate. Correct answer B: Although it is impossible to write a program in the LET language (as extended by Task 1) that gets into an infinite loop and runs forever, a program such as "x" might get into an infinite loop in some implementations because the behavior of value-of on unbound variables is not specified. ;; Omitting answers for Task 3 from public view Task 4. ======= Yes, it is possible to write a program in the PROC language that gets into an infinite loop and runs forever. Here is an example: let f = proc (f) (f f) in (f f) ;; Omitting answers for Task 5 from public view Task 6. ======= If f's formal parameter were a, then the result would be 2. Task 7. ======= Please excuse me from this requirement. I am employed by a top-secret successor to the KGB, and I don't want anyone to recognize me.