4.1 Exercise 4.1

We can use the fact that let* computes its results in left-to-right order to force the order of evaluation:

(define (list-of-values-ltr exp env)
  (if (no-operands? exps)
      '()
      (let* ((first (eval (first-operand exps) env))
             (rest (list-of-values (rest-operands exps) env)))
        (cons first rest))))
(define (list-of-values-rtl exp env)
  (if (no-operands? exps)
      '()
      (let* ((rest (list-of-values (rest-operands exps) env))
             (first (eval (first-operand exps) env)))
        (cons first rest))))