diff --git a/project2/eval.scm b/project2/eval.scm index ca4dfa3..fb12902 100644 --- a/project2/eval.scm +++ b/project2/eval.scm @@ -109,15 +109,7 @@ (else (error "Unknown expression type -- EVAL" exp)))) (define (m-apply procedure arguments) - (cond ((primitive-procedure? procedure) - (apply-primitive-procedure procedure arguments)) - ((compound-procedure? procedure) - (eval-sequence - (procedure-body procedure) - (extend-environment (procedure-parameters procedure) - arguments - (procedure-environment procedure)))) - (else (error "Unknown procedure type -- APPLY" procedure)))) + (apply-procedure procedure argument)) (define (list-of-values exps env) (cond ((no-operands? exps) '()) @@ -192,13 +184,12 @@ ; double bubbles (define (make-procedure parameters body env) - (list 'procedure parameters body env)) -(define (compound-procedure? proc) - (tagged-list? proc 'procedure)) -(define (procedure-parameters proc) (second proc)) -(define (procedure-body proc) (third proc)) -(define (procedure-environment proc) (fourth proc)) - + (lambda arguments + (eval-sequence body + (extend-environment + parameters + arguments + env)))) ; bindings (define (make-binding var val) @@ -268,9 +259,7 @@ ; primitives procedures - hooks to underlying Scheme procs (define (make-primitive-procedure implementation) - (list 'primitive implementation)) -(define (primitive-procedure? proc) (tagged-list? proc 'primitive)) -(define (primitive-implementation proc) (cadr proc)) + implementation) (define (primitive-procedures) (list (list 'car car) (list 'cdr cdr) @@ -293,8 +282,8 @@ (define (primitive-procedure-objects) (map make-primitive-procedure (map cadr (primitive-procedures)))) -(define (apply-primitive-procedure proc args) - (apply (primitive-implementation proc) args)) +(define (apply-procedure proc args) + (apply proc args)) ; used to initialize the environment (define (setup-environment)