正在加载图片...
The 6.001 Lazy Meta-Circular Evaluator The Core Evaluator (define (l-eval exp env) (cond ((self-evaluating? exp) exp) ((variable? exp)(lookup-variable-value exp env)) ((quoted? exp)(text-of-quotation exp)) ((assignment? exp)(eval-assignment exp env)) ((definition? exp)(eval-definition exp env)) ((if? exp)(eval-if exp env)) ((lambda? exp) (make-procedure (lambda-parameters exp) (lambda-body exp) env)) ((begin? exp)(eval-sequence(begin-actions exp) env)) ((cond? exp)(eval (cond->if exp) env)) (Cand? exp) (l-eval (and->if exp) env)) ((until? exp)(eval-until exp env)) ((application? exp) (l-apply (actual-value (operator exp)env) (operands exp) lse (error "Unknown expression type - L-EVAL"exp)))) (define (l-apply procedure arguments env) (cond ((primitive-procedure? procedure) (apply-primitive-procedure procedure (list-of -arg-values arguments env))) ((compound-procedure? procedure (eval-sequence (procedure-body procedure) (extend-environment (procedure-parameters procedure) (list-of-delayed-args arguments env) (procedure-environment procedure)))) (else (error"Unknown procedure type --L-APPLY"procedure)))) (define (actual-value exp env) (force-it (l-eval exp env))) define (list-of-arg-values exps env) (if (no-operands? exps),() (cons (actual-value (first-operand exps) env) (list-of -arg-values (rest-operands exps) env)))) define (list-of-delayed-args exps env) (if (no-operands? exps)'() (cons (delay-it (first-operand exps) env) (list-of-delayed-args (rest-operands exps) env)))) define (eval-if exp env) (if (actual-value (if-predicate exp)env) (l-eval (if-consequent exp) env) (l-eval (if-alternative exp) env))) (define (eval-sequence exps env)The 6.001 Lazy Meta-Circular Evaluator The Core Evaluator (define (l-eval exp env) (cond ((self-evaluating? exp) exp) ((variable? exp) (lookup-variable-value exp env)) ((quoted? exp) (text-of-quotation exp)) ((assignment? exp) (eval-assignment exp env)) ((definition? exp) (eval-definition exp env)) ((if? exp) (eval-if exp env)) ((lambda? exp) (make-procedure (lambda-parameters exp) (lambda-body exp) env)) ((begin? exp) (eval-sequence (begin-actions exp) env)) ((cond? exp) (eval (cond->if exp) env)) ((and? exp) (l-eval (and->if exp) env)) ((until? exp) (eval-until exp env)) ((application? exp) (l-apply (actual-value (operator exp) env) (operands exp) env)) (else (error "Unknown expression type -- L-EVAL" exp)))) (define (l-apply procedure arguments env) (cond ((primitive-procedure? procedure) (apply-primitive-procedure procedure (list-of-arg-values arguments env))) ((compound-procedure? procedure) (eval-sequence (procedure-body procedure) (extend-environment (procedure-parameters procedure) (list-of-delayed-args arguments env) (procedure-environment procedure)))) (else (error "Unknown procedure type -- L-APPLY" procedure)))) (define (actual-value exp env) (force-it (l-eval exp env))) (define (list-of-arg-values exps env) (if (no-operands? exps) ’() (cons (actual-value (first-operand exps) env) (list-of-arg-values (rest-operands exps) env)))) (define (list-of-delayed-args exps env) (if (no-operands? exps) ’() (cons (delay-it (first-operand exps) env) (list-of-delayed-args (rest-operands exps) env)))) (define (eval-if exp env) (if (actual-value (if-predicate exp) env) (l-eval (if-consequent exp) env) (l-eval (if-alternative exp) env))) (define (eval-sequence exps env) 1
向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有