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))


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章