SICP Exercise 4.1

SICP Exercise 4.1

1,用let表达式去控制求值的顺序

(define (list-of-values-left-to-right exps env)
  (if (no-operands? exps)
      '()
      (let ((first (eval (first-operand exps) env)))
        (cons first (list-of-values (rest-operands exps) env)))))

(define (list-of-values-right-to-left exps env)
  (if (no-operands? exps)
      '()
      (let ((rest (list-of-values (rest-operands exps) env)))
        (cons (eval (first-operand exps) env)
              rest))))

下面是对这种方法的测试:

(define (foo)
  (cons (begin (display 'left)
               'l)
        (begin (display 'right)
               'r)))

(define (foo-left)
  (let ((a (begin (display 'left)
                  'l)))
    (cons a (begin (display 'right)
                   'r))))

(define (foo-right)
  (let ((b (begin (display 'right)
                  'r)))
    (cons (begin (display 'left)
                 'l)
          b)))
2,另外也可以用顺序求值来控制执行顺序:

(define (foo-right)
  (define a (begin (display 'right)
                   'r))
  (cons (begin (display 'left)
               'l)
        a))


你可能感兴趣的:(测试,REST)