(define (list-of-values exps env) (if (no-operand? exps) '() (cons (eval (first-operand exps) env) (list-of-values (rest-operands exps) env)))) (define (list-of-values-left-to-right exps env) (if (no-operand? exps) '() (let ((first (eval (first-operand exps) env))) (cons first (list-of-values-left-to-right (rest-operands exps) env))))) (define (list-of-values-right-to-left exps env) (if (no-operand? exps) '() (let ((rest (list-of-values-right-to-left (rest-operands exps) env))) (cons (eval (first-operand exps) env) rest)))) (define no-operand? null?) (define first-operand car) (define rest-operands cdr) (define (eval x env) (display x) (newline) x) ; MIT-scheme evaluates expressions right to left ; 1 ]=> (list-of-values '(1 2 3) '()) ; 3 ; 2 ; 1 ; ;Value: (1 2 3) ; ; 1 ]=> (list-of-values-left-to-right '(1 2 3) '()) ; 1 ; 2 ; 3 ; ;Value: (1 2 3) ; ; 1 ]=> (list-of-values-right-to-left '(1 2 3) '()) ; 3 ; 2 ; 1 ; ;Value: (1 2 3)