正在加载图片...
6.001 Lazy Metacircular Evaluator 5 (define (scan vars vals) (cond ((null? vars)(env-loop (enclosing-environment env))) ((eq? var (car vars)) (set-car! vals val)); Same as lookup except for this (else (scan (cdr vars)(cdr vals))))) (if (eq? env the-empt Error "Unbound variable --SET! var) (let ((frame (first-frame env))) (scan (frame-variables frame)(frame-values frame))))) (env-loop env)) (define (define-variable! var val env) (let ((frame (first-frame env))) (define (scan vars vals) (cond ((null? vars)(add-binding-to-frame! var val frame)) ((eq? var (car vars))(set-car! vals val)) Else (scan (cdr vars)(cdr vals))))) (scan (frame-variables frame) (frame-values frame)))) Primitive procedures and the initial environment (define (primitive-procedure? proc)(tagged-list? proc ' primitive)) (define (primitive-implementation proc)(cadr proc)) (define primitive-procedures (list (I ar car dr cdr) (1ist’ cons cons) (list ' null? null?) (list ,listlist) (1ist++) (list (1ist**) (1i8t--) more primitives (define (primitive-procedure-names)(map car primitive-procedures)) (define (primitive-procedure-objects) map (lambda (proc) (list ' primitive (cadr proc))) primitive-procedures)) define (setup-environment (let ((initial-env (extend-environment (primitive-procedure-names (primitive-procedure-objects the-empty-environment))) (define-variable! > true #t initial-env) (define-variable! ' false #f initial-env)6.001 Lazy Metacircular Evaluator 5 (define (scan vars vals) (cond ((null? vars) (env-loop (enclosing-environment env))) ((eq? var (car vars)) (set-car! vals val)) ; Same as lookup except for this (else (scan (cdr vars) (cdr vals))))) (if (eq? env the-empty-environment) (error "Unbound variable -- SET!" var) (let ((frame (first-frame env))) (scan (frame-variables frame) (frame-values frame))))) (env-loop env)) (define (define-variable! var val env) (let ((frame (first-frame env))) (define (scan vars vals) (cond ((null? vars) (add-binding-to-frame! var val frame)) ((eq? var (car vars)) (set-car! vals val)) (else (scan (cdr vars) (cdr vals))))) (scan (frame-variables frame) (frame-values frame)))) Primitive Procedures and the Initial Environment (define (primitive-procedure? proc) (tagged-list? proc ’primitive)) (define (primitive-implementation proc) (cadr proc)) (define primitive-procedures (list (list ’car car) (list ’cdr cdr) (list ’cons cons) (list ’null? null?) (list ’list list) (list ’+ +) (list ’> >) (list ’< <) (list ’= =) (list ’* *) (list ’- -) ; ... more primitives )) (define (primitive-procedure-names) (map car primitive-procedures)) (define (primitive-procedure-objects) (map (lambda (proc) (list ’primitive (cadr proc))) primitive-procedures)) (define (setup-environment) (let ((initial-env (extend-environment (primitive-procedure-names) (primitive-procedure-objects) the-empty-environment))) (define-variable! ’true #t initial-env) (define-variable! ’false #f initial-env) initial-env))
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有