From 30c8a6c26a1a8f77ec19cc70a23a00fbea152062 Mon Sep 17 00:00:00 2001 From: Correl Roush Date: Mon, 1 Dec 2014 00:53:22 -0500 Subject: [PATCH] 4.1 --- 4-1.org | 1085 ++++++++++++++++++++++++++++++++++++++++++++ 4.1-eval-apply.svg | 64 +++ 4.1-lisp.jpg | Bin 0 -> 60737 bytes 3 files changed, 1149 insertions(+) create mode 100644 4-1.org create mode 100644 4.1-eval-apply.svg create mode 100644 4.1-lisp.jpg diff --git a/4-1.org b/4-1.org new file mode 100644 index 0000000..0c98ab9 --- /dev/null +++ b/4-1.org @@ -0,0 +1,1085 @@ +#+TITLE: 4.1 - The Metacircular Evaluator +#+STARTUP: indent +#+OPTIONS: num:nil + +We will be writing a Lisp evaluator implemented in Lisp (hence, +/metacircular/: an evaluator written in the same language it evaluates). + +[[file:4.1-lisp.jpg]] + +[[file:4.1-eval-apply.svg]] + +The evaluator will be specified using procedures defining the syntax +of the expressions to be evaluated. Data abstraction will be used to +make the evaluator independent of the representation of the language. + +* <<4.1.1>> The Core of the Evaluator +** Eval +#+BEGIN_SRC scheme :tangle yes + (define (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)) + ((application? exp) + (apply (eval (operator exp) env) + (list-of-values + (operands exp) + env))) + (else + (error "Unknown expression + type: EVAL" exp)))) +#+END_SRC +** Apply +#+BEGIN_SRC scheme :tangle yes + (define (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)))) +#+END_SRC +** Procedure Arguments +#+BEGIN_SRC scheme :tangle yes + (define (list-of-values exps env) + (if (no-operands? exps) + '() + (cons (eval (first-operand exps) env) + (list-of-values + (rest-operands exps) + env)))) +#+END_SRC +** Conditionals +#+BEGIN_SRC scheme :tangle yes + (define (eval-if exp env) + (if (true? (eval (if-predicate exp) env)) + (eval (if-consequent exp) env) + (eval (if-alternative exp) env))) +#+END_SRC +#+BEGIN_QUOTE +In this case, the language being implemented and the implementation +language are the same. Contemplation of the meaning of ~true?~ here +yields expansion of consciousness without the abuse of substance. +#+END_QUOTE +** Sequences +#+BEGIN_SRC scheme :tangle yes + (define (eval-sequence exps env) + (cond ((last-exp? exps) + (eval (first-exp exps) env)) + (else + (eval (first-exp exps) env) + (eval-sequence (rest-exps exps) + env)))) +#+END_SRC +** Assignments and definitions +#+BEGIN_SRC scheme + (define (eval-assignment exp env) + (set-variable-value! + (assignment-variable exp) + (eval (assignment-value exp) env) + env) + 'ok) + + (define (eval-definition exp env) + (define-variable! + (definition-variable exp) + (eval (definition-value exp) env) + env) + 'ok) +#+END_SRC +** Exercise 4.1 +Notice that we cannot tell whether the metacircular evaluator +evaluates operands from left to right or from right to left. Its +evaluation order is inherited from the underlying Lisp: If the +arguments to cons in ~list-of-values~ are evaluated from left to +right, then ~list-of-values~ will evaluate operands from left to +right; and if the arguments to cons are evaluated from right to left, +then ~list-of-values~ will evaluate operands from right to left. + +Write a version of ~list-of-values~ that evaluates operands from left +to right regardless of the order of evaluation in the underlying +Lisp. Also write a version of ~list-of-values~ that evaluates operands +from right to left. + +---------------------------------------------------------------------- + +#+BEGIN_SRC scheme :tangle yes + (define (list-of-values-ltr exps env) + (if (no-operands? exps) + '() + (begin + (define first (eval (first-operand exps) env)) + (define rest (list-of-values-ltr + (rest-operands exps) + env)) + (cons first rest)))) + (define (list-of-values-rtl exps env) + (if (no-operands? exps) + '() + (begin + (define rest (list-of-values-rtl + (rest-operands exps) + env)) + (define first (eval (first-operand exps) env)) + (cons first rest)))) +#+END_SRC +* <<4.1.2>> Representing Expressions +- The only self-evaluating items are numbers and strings: + #+BEGIN_SRC scheme :tangle yes + (define (self-evaluating? exp) + (cond ((number? exp) true) + ((string? exp) true) + (else false))) + #+END_SRC +- Variables are represented by symbols: + #+BEGIN_SRC scheme :tangle yes + (define (variable? exp) (symbol? exp)) + #+END_SRC +- Quotations have the form ~(quote 〈text-of-quotation〉)~: + #+BEGIN_SRC scheme :tangle yes + (define (quoted? exp) + (tagged-list? exp 'quote)) + + (define (text-of-quotation exp) + (cadr exp)) + #+END_SRC + + ~Quoted?~ is defined in terms of the procedure ~tagged-list?~, which + identifies lists beginning with a designated symbol: + + #+BEGIN_SRC scheme :tangle yes + (define (tagged-list? exp tag) + (if (pair? exp) + (eq? (car exp) tag) + false)) + #+END_SRC +- Assignments have the form ~(set! 〈var〉 〈value〉)~: + #+BEGIN_SRC scheme :tangle yes + (define (assignment? exp) + (tagged-list? exp 'set!)) + + (define (assignment-variable exp) + (cadr exp)) + + (define (assignment-value exp) (caddr exp)) + #+END_SRC +- Definitions have the form + #+BEGIN_EXAMPLE + (define ⟨var⟩ ⟨value⟩) + #+END_EXAMPLE + or the form + #+BEGIN_EXAMPLE + (define (⟨var⟩ ⟨param₁⟩ … ⟨paramₙ⟩) + ⟨body⟩) + #+END_EXAMPLE + + The latter form (standard procedure definition) is syntactic sugar for + #+BEGIN_EXAMPLE + (define ⟨var⟩ + (lambda (⟨param₁⟩ … ⟨paramₙ⟩) + ⟨body⟩)) + #+END_EXAMPLE + + The corresponding syntax procedures are the following: + #+BEGIN_SRC scheme :tangle yes + (define (definition? exp) + (tagged-list? exp 'define)) + + (define (definition-variable exp) + (if (symbol? (cadr exp)) + (cadr exp) + (caadr exp))) + + (define (definition-value exp) + (if (symbol? (cadr exp)) + (caddr exp) + (make-lambda + (cdadr exp) ; formal parameters + (cddr exp)))) ; body + #+END_SRC +- Lambda expressions are lists that begin with the symbol ~lambda~: + #+BEGIN_SRC scheme :tangle yes + (define (lambda? exp) + (tagged-list? exp 'lambda)) + (define (lambda-parameters exp) (cadr exp)) + (define (lambda-body exp) (cddr exp)) + #+END_SRC + + We also provide a constructor for lambda expressions, which is used + by ~definition-value~, above: + + #+BEGIN_SRC scheme :tangle yes + (define (make-lambda parameters body) + (cons 'lambda (cons parameters body))) + #+END_SRC +- Conditionals begin with ~if~ and have a predicate, a consequent, and + an (optional) alternative. If the expression has no alternative + part, we provide ~false~ as the alternative. + + #+BEGIN_SRC scheme :tangle yes + (define (if? exp) (tagged-list? exp 'if)) + (define (if-predicate exp) (cadr exp)) + (define (if-consequent exp) (caddr exp)) + (define (if-alternative exp) + (if (not (null? (cdddr exp))) + (cadddr exp) + 'false)) + #+END_SRC + + We also provide a constructor for ~if~ expressions, to be used by + ~cond->if~ to transform ~cond~ expressions into ~if~ expressions: + + #+BEGIN_SRC scheme :tangle yes + (define (make-if predicate + consequent + alternative) + (list 'if + predicate + consequent + alternative)) + #+END_SRC +- ~Begin~ packages a sequence of expressions into a single + expression. We include syntax operations on ~begin~ expressions to + extract the actual sequence from the ~begin~ expression, as well as + selectors that return the first expression and the rest of the + expressions in the sequence. + + #+BEGIN_SRC scheme :tangle yes + (define (begin? exp) + (tagged-list? exp 'begin)) + (define (begin-actions exp) (cdr exp)) + (define (last-exp? seq) (null? (cdr seq))) + (define (first-exp seq) (car seq)) + (define (rest-exps seq) (cdr seq)) + #+END_SRC + + We also include a constructor ~sequence->exp~ (for use by + ~cond->if~) that transforms a sequence into a single expression, + using ~begin~ if necessary: + + #+BEGIN_SRC scheme :tangle yes + (define (sequence->exp seq) + (cond ((null? seq) seq) + ((last-exp? seq) (first-exp seq)) + (else (make-begin seq)))) + + (define (make-begin seq) (cons 'begin seq)) + #+END_SRC +- A procedure application is any compound expression that is not one + of the above expression types. The ~car~ of the expression is the + operator, and the ~cdr~ is the list of operands: + + #+BEGIN_SRC scheme :tangle yes + (define (application? exp) (pair? exp)) + (define (operator exp) (car exp)) + (define (operands exp) (cdr exp)) + (define (no-operands? ops) (null? ops)) + (define (first-operand ops) (car ops)) + (define (rest-operands ops) (cdr ops)) + #+END_SRC +** Derived expressions +~Cond~ can be represented as a nest of if expressions. + +#+BEGIN_SRC scheme :tangle yes + (define (cond? exp) + (tagged-list? exp 'cond)) + (define (cond-clauses exp) (cdr exp)) + (define (cond-else-clause? clause) + (eq? (cond-predicate clause) 'else)) + (define (cond-predicate clause) + (car clause)) + (define (cond-actions clause) + (cdr clause)) + (define (cond->if exp) + (expand-clauses (cond-clauses exp))) + (define (expand-clauses clauses) + (if (null? clauses) + 'false ; no else clause + (let ((first (car clauses)) + (rest (cdr clauses))) + (if (cond-else-clause? first) + (if (null? rest) + (sequence->exp + (cond-actions first)) + (error "ELSE clause isn't + last: COND->IF" + clauses)) + (make-if (cond-predicate first) + (sequence->exp + (cond-actions first)) + (expand-clauses + rest)))))) +#+END_SRC + +Expressions (such as ~cond~) that we choose to implement as syntactic +transformations are called derived expressions. ~Let~ expressions are +also derived expressions (see Exercise 4.6). + +#+BEGIN_QUOTE +Practical Lisp systems provide a mechanism that allows a user to add +new derived expressions and specify their implementation as syntactic +transformations without modifying the evaluator. Such a user-defined +transformation is called a macro. Although it is easy to add an +elementary mechanism for defining macros, the resulting language has +subtle name-conflict problems. There has been much research on +mechanisms for macro definition that do not cause these +difficulties. See, for example, Kohlbecker 1986, Clinger and Rees +1991, and Hanson 1991. +#+END_QUOTE +** Exercise 4.2 +Louis Reasoner plans to reorder the ~cond~ clauses in ~eval~ so that +the clause for procedure applications appears before the clause for +assignments. He argues that this will make the interpreter more +efficient: Since programs usually contain more applications than +assignments, definitions, and so on, his modified ~eval~ will usually +check fewer clauses than the original ~eval~ before identifying the +type of an expression. + +1. What is wrong with Louis’s plan? (Hint: What will Louis’s evaluator + do with the expression ~(define x 3)~?) + + ------------------------------------------------------------------- + + The procedure application check requires only that the expression + be a pair, which any list will satisfy. For example, the expression + ~(define x 3)~ would trigger application instead of assignment, and + end up failing. +2. Louis is upset that his plan didn’t work. He is willing to go to + any lengths to make his evaluator recognize procedure applications + before it checks for most other kinds of expressions. Help him by + changing the syntax of the evaluated language so that procedure + applications start with call. For example, instead of (factorial 3) + we will now have to write (call factorial 3) and instead of (+ 1 2) + we will have to write (call + 1 2). + + ------------------------------------------------------------------- + + #+BEGIN_SRC scheme + (define (application? exp) + (tagged-list exp 'call)) + + (define (operator exp) (cadr exp)) + (define (operands exp) (cddr exp)) + #+END_SRC +** Exercise 4.3 +Rewrite eval so that the dispatch is done in data-directed +style. Compare this with the data-directed differentiation procedure +of Exercise 2.73. (You may use the =car= of a compound expression as +the type of the expression, as is appropriate for the syntax +implemented in this section.) + +---------------------------------------------------------------------- + +Borrowed from [[http://wqzhang.wordpress.com/2009/09/17/sicp-exercise-4-3/][Weiqun Zhang's blog]], for working implementations of +~get~ and ~put~. + +#+BEGIN_SRC scheme :tangle yes + ;; ------------------------------------------------------------------- + ;; Exercise 4.3 + ;; ------------------------------------------------------------------- + + (define eval-table (make-eq-hash-table)) + (define (get key) + (hash-table/get eval-table key #f)) + (define (put key proc) + (hash-table/put! eval-table key proc)) + + (define (eval exp env) + (cond ((self-evaluating? exp) exp) + ((variable? exp) (lookup-variable-value exp env)) + ((get (car exp)) + ((get (car exp)) exp env)) + ((application? exp) + (apply (eval (operator exp) env) + (list-of-values (operands exp) env))) + (else + (error "Unknown expression type -- EVAL" exp)))) + + (put 'quote + (lambda (exp env) + (text-of-quotation exp))) + (put 'set! + (lambda (exp env) + (eval-assignment exp env))) + (put 'define eval-definition) + (put 'if eval-if) + (put 'lambda + (lambda (exp env) + (make-procedure (lambda-parameters exp) + (lambda-body exp) + env))) + (put 'begin + (lambda (exp env) + (eval-sequence (begin-actions exp) env))) + (put 'cond + (lambda (exp env) + (eval (cond->if exp) env))) +#+END_SRC +** Exercise 4.4 +Recall the definitions of the special forms and and or from Chapter 1: + +- ~and~: The expressions are evaluated from left to right. If any + expression evaluates to ~false~, ~false~ is returned; any remaining + expressions are not evaluated. If all the expressions evaluate to + true values, the value of the last expression is returned. If there + are no expressions then ~true~ is returned. +- ~or~: The expressions are evaluated from left to right. If any + expression evaluates to a true value, that value is returned; any + remaining expressions are not evaluated. If all expressions evaluate + to ~false~, or if there are no expressions, then ~false~ is returned. + +Install ~and~ and ~or~ as new special forms for the evaluator by +defining appropriate syntax procedures and evaluation procedures +~eval-and~ and ~eval-or~. Alternatively, show how to implement ~and~ +and ~or~ as derived expressions. + +---------------------------------------------------------------------- + +#+BEGIN_SRC scheme :tangle yes + ;; ------------------------------------------------------------------- + ;; Exercise 4.4 + ;; ------------------------------------------------------------------- + + ;; Special forms + + (define (eval-and exp env) + (define (eval-and-operands exps) + (if (no-operands? exps) + true + (let ((first (eval (first-operand exps) env)) + (rest (rest-operands exps))) + (if (false? first) + false + (if (no-operands? rest) + first + (eval-and-operands rest)))))) + (eval-and-operands (operands exp))) + + (define (eval-or exp env) + (define (eval-or-operands exps) + (if (no-operands? exps) + false + (let ((first (eval (first-operand exps) env)) + (rest (rest-operands exps))) + (if (true? first) + first + (eval-or-operands rest))))) + (eval-or-operands (operands exp))) + + (put 'and eval-and) + (put 'or eval-or) + + ;; Derived expressions + + (define (and->if exp) + (define (expand exps) + (if (null? exps) + 'true + (make-if (list 'false? (car exps)) + 'false + (if (null? (cdr exps)) + (car exps) + (expand (cdr exps)))))) + (expand (cdr exp))) + + (define (or->if exp) + (define (expand exps) + (if (null? exps) + 'false + (make-if (list 'true? (car exps)) + (car exps) + (expand (cdr exps))))) + (expand (cdr exp))) +#+END_SRC +** Exercise 4.5 +Scheme allows an additional syntax for ~cond~ clauses, ~(⟨test⟩ => +⟨recipient⟩)~. If ~⟨test⟩~ evaluates to a true value, then +~⟨recipient⟩~ is evaluated. Its value must be a procedure of one +argument; this procedure is then invoked on the value of the ~⟨test⟩~, +and the result is returned as the value of the ~cond~ expression. For +example + +#+BEGIN_SRC scheme + (cond ((assoc 'b '((a 1) (b 2))) => cadr) + (else false)) +#+END_SRC + +returns ~2~. Modify the handling of ~cond~ so that it supports this +extended syntax. + +---------------------------------------------------------------------- + +#+BEGIN_SRC scheme :tangle yes + ;; ------------------------------------------------------------------- + ;; Exercise 4.5 + ;; ------------------------------------------------------------------- + + (define (cond-actions clause) + (if (tagged-list? (cdr clause) '=>) + (list (list (caddr clause) (cond-predicate clause))) + (cdr clause))) +#+END_SRC +** Exercise 4.6 +Let expressions are derived expressions, because + +#+BEGIN_SRC scheme + (let ((⟨var₁⟩ ⟨exp₁⟩) … (⟨varₙ⟩ ⟨expₙ⟩)) + ⟨body⟩) +#+END_SRC + +is equivalent to + +#+BEGIN_SRC scheme + ((lambda (⟨var₁⟩ … ⟨varₙ⟩) + ⟨body⟩) + ⟨exp₁⟩ + … + ⟨expₙ⟩) +#+END_SRC + +Implement a syntactic transformation ~let->combination~ that reduces +evaluating ~let~ expressions to evaluating combinations of the type +shown above, and add the appropriate clause to ~eval~ to handle ~let~ +expressions. + +---------------------------------------------------------------------- + +#+BEGIN_SRC scheme :tangle yes + ;; ------------------------------------------------------------------- + ;; Exercise 4.6 + ;; ------------------------------------------------------------------- + + (define (let->combination exp) + (let ((var-alist (cadr exp)) + (body (cddr exp))) + (append (list (append (list 'lambda + (map car var-alist)) + body)) + (map cadr var-alist)))) + + + (put 'let + (lambda (exp env) + (eval (let->combination exp) env))) +#+END_SRC +** Exercise 4.7 +~Let*~ is similar to ~let~, except that the bindings of the ~let*~ +variables are performed sequentially from left to right, and each +binding is made in an environment in which all of the preceding +bindings are visible. For example + +#+BEGIN_SRC scheme + (let* ((x 3) + (y (+ x 2)) + (z (+ x y 5))) + (* x z)) +#+END_SRC + +returns ~39~. Explain how a ~let*~ expression can be rewritten as a +set of nested ~let~ expressions, and write a procedure +~let*->nested-lets~ that performs this transformation. If we have +already implemented ~let~ ([[Exercise 4.6]]) and we want to extend the +evaluator to handle ~let*~, is it sufficient to add a clause to ~eval~ +whose action is + +#+BEGIN_SRC scheme + (eval (let*->nested-lets exp) env) +#+END_SRC + +or must we explicitly expand ~let*~ in terms of non-derived +expressions? + +---------------------------------------------------------------------- + +~Let*~ can be written as a set of nested ~let~ expressions like so: + +#+BEGIN_SRC scheme + (let ((x 3)) + (let ((y (+ x 2))) + (let ((z (+ x y 5))) + (* x z)))) +#+END_SRC + +#+BEGIN_SRC scheme :tangle yes + ;; ------------------------------------------------------------------- + ;; Exercise 5.7 + ;; ------------------------------------------------------------------- + + (define (let*->nested-lets exp) + (define (nested-let var-alist body) + (if (null? var-alist) + body + (let ((var-pair (car var-alist)) + (var-rest (cdr var-alist))) + (append (list 'let (list var-pair) + (nested-let var-rest body)))))) + (nested-let (cadr exp) + (cddr exp))) + + (put 'let* + (lambda (exp env) + (eval (let*->nested-lets exp) env))) +#+END_SRC + +Adding the new clause to ~eval~ is sufficient; it will recursively +evaluate the resulting expressions, translating ~let*~ to ~let~ to +combinations along the way. +** Exercise 4.8 +“Named ~let~” is a variant of ~let~ that has the form + +#+BEGIN_SRC scheme + (let ⟨var⟩ ⟨bindings⟩ ⟨body⟩) +#+END_SRC + +The ~⟨bindings⟩~ and ~⟨body⟩~ are just as in ordinary ~let~, except +that ~⟨var⟩~ is bound within ~⟨body⟩~ to a procedure whose body is +~⟨body⟩~ and whose parameters are the variables in the +~⟨bindings⟩~. Thus, one can repeatedly execute the ~⟨body⟩~ by +invoking the procedure named ~⟨var⟩~. For example, the iterative +Fibonacci procedure (1.2.2) can be rewritten using named ~let~ as +follows: + +#+BEGIN_SRC scheme + (define (fib n) + (let fib-iter ((a 1) (b 0) (count n)) + (if (= count 0) + b + (fib-iter (+ a b) + a + (- count 1))))) +#+END_SRC + +Modify ~let->combination~ of [[Exercise 4.6]] to also support named ~let~. + +---------------------------------------------------------------------- + +#+BEGIN_SRC scheme :tangle yes + ;; ------------------------------------------------------------------- + ;; Exercise 4.7 + ;; ------------------------------------------------------------------- + + (define (let->combination exp) + (define (let-combination var-alist body) + (append (list (append (list 'lambda + (map car var-alist)) + body)) + (map cadr var-alist))) + (define (named-let-combination name var-alist body) + (let-combination var-alist + (append (list (append (list 'define + (cons name (map car var-alist))) + body)) + (list (cons name (map car var-alist)))))) + (cond ((alist? (cadr exp)) + (let-combination (cadr exp) (cddr exp))) + ((symbol? (cadr exp)) + (named-let-combination (cadr exp) + (caddr exp) + (cdddr exp))) + (else (error "Invalid expression -- LET")))) + + (put 'let + (lambda (exp env) + (eval (let->combination exp) env))) +#+END_SRC +** Exercise 4.9 +Many languages support a variety of iteration constructs, such as +~do~, ~for~, ~while~, and ~until~. In Scheme, iterative processes can +be expressed in terms of ordinary procedure calls, so special +iteration constructs provide no essential gain in computational +power. On the other hand, such constructs are often convenient. Design +some iteration constructs, give examples of their use, and show how to +implement them as derived expressions. +** Exercise 4.10 +By using data abstraction, we were able to write an ~eval~ procedure +that is independent of the particular syntax of the language to be +evaluated. To illustrate this, design and implement a new syntax for +Scheme by modifying the procedures in this section, without changing +~eval~ or ~apply~. +* <<4.1.3>> Evaluator Data Structures +** Testing of predicates +#+BEGIN_SRC scheme :tangle yes + (define (true? x) + (not (eq? x false))) + + (define (false? x) + (eq? x false)) +#+END_SRC +** Representing procedures +#+BEGIN_SRC scheme :tangle yes + (define (make-procedure parameters body env) + (list 'procedure parameters body env)) + (define (compound-procedure? p) + (tagged-list? p 'procedure)) + (define (procedure-parameters p) (cadr p)) + (define (procedure-body p) (caddr p)) + (define (procedure-environment p) (cadddr p)) +#+END_SRC +** Operations on Environments +#+BEGIN_SRC scheme :tangle yes + (define (enclosing-environment env) (cdr env)) + (define (first-frame env) (car env)) + (define the-empty-environment '()) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define (make-frame variables values) + (cons variables values)) + (define (frame-variables frame) (car frame)) + (define (frame-values frame) (cdr frame)) + (define (add-binding-to-frame! var val frame) + (set-car! frame (cons var (car frame))) + (set-cdr! frame (cons val (cdr frame)))) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define (extend-environment vars vals base-env) + (if (= (length vars) (length vals)) + (cons (make-frame vars vals) base-env) + (if (< (length vars) (length vals)) + (error "Too many arguments supplied" + vars + vals) + (error "Too few arguments supplied" + vars + vals)))) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define (lookup-variable-value var env) + (define (env-loop env) + (define (scan vars vals) + (cond ((null? vars) + (env-loop + (enclosing-environment env))) + ((eq? var (car vars)) + (car vals)) + (else (scan (cdr vars) + (cdr vals))))) + (if (eq? env the-empty-environment) + (error "Unbound variable" var) + (let ((frame (first-frame env))) + (scan (frame-variables frame) + (frame-values frame))))) + (env-loop env)) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define (set-variable-value! var val env) + (define (env-loop env) + (define (scan vars vals) + (cond ((null? vars) + (env-loop + (enclosing-environment env))) + ((eq? var (car vars)) + (set-car! vals val)) + (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)) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (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)))) +#+END_SRC +* <<4.1.4>> Running the Evaluator as a Program +#+BEGIN_SRC scheme :tangle yes + (define (setup-environment) + (let ((initial-env + (extend-environment + (primitive-procedure-names) + (primitive-procedure-objects) + the-empty-environment))) + (define-variable! 'true true initial-env) + (define-variable! 'false false initial-env) + initial-env)) + + (define the-global-environment + (setup-environment)) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define (primitive-procedure? proc) + (tagged-list? proc 'primitive)) + + (define (primitive-implementation proc) + (cadr proc)) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define primitive-procedures + (list (list 'car car) + (list 'cdr cdr) + (list 'cons cons) + (list 'null? null?) + ⟨more primitives⟩ )) + + (define (primitive-procedure-names) + (map car primitive-procedures)) + + (define (primitive-procedure-objects) + (map (lambda (proc) + (list 'primitive (cadr proc))) + primitive-procedures)) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define (apply-primitive-procedure proc args) + (apply-in-underlying-scheme + (primitive-implementation proc) args)) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define input-prompt ";;; M-Eval input:") + (define output-prompt ";;; M-Eval value:") + + (define (driver-loop) + (prompt-for-input input-prompt) + (let ((input (read))) + (let ((output + (eval input + the-global-environment))) + (announce-output output-prompt) + (user-print output))) + (driver-loop)) + + (define (prompt-for-input string) + (newline) (newline) + (display string) (newline)) + + (define (announce-output string) + (newline) (display string) (newline)) +#+END_SRC +#+BEGIN_SRC scheme :tangle yes + (define (user-print object) + (if (compound-procedure? object) + (display + (list 'compound-procedure + (procedure-parameters object) + (procedure-body object) + ')) + (display object))) +#+END_SRC + +Now all we need to do to run the evaluator is to initialize the global +environment and start the driver loop. Here is a sample interaction: + +#+BEGIN_SRC scheme + (define the-global-environment + (setup-environment)) + + (driver-loop) + + ;;; M-Eval input: + (define (append x y) + (if (null? x) + y + (cons (car x) (append (cdr x) y)))) + + ;;; M-Eval value: + ok + + ;;; M-Eval input: + (append '(a b c) '(d e f)) + + ;;; M-Eval value: + (a b c d e f) +#+END_SRC +* <<4.1.5>> Data as Programs +our evaluator is seen to be a universal machine. It mimics other +machines when these are described as Lisp programs. This is +striking. + +#+BEGIN_QUOTE +The fact that the machines are described in Lisp is inessential. If we +give our evaluator a Lisp program that behaves as an evaluator for +some other language, say C, the Lisp evaluator will emulate the C +evaluator, which in turn can emulate any machine described as a C +program. Similarly, writing a Lisp evaluator in C produces a C program +that can execute any Lisp program. The deep idea here is that any +evaluator can emulate any other. Thus, the notion of “what can in +principle be computed” (ignoring practicalities of time and memory +required) is independent of the language or the computer, and instead +reflects an underlying notion of computability. This was first +demonstrated in a clear way by Alan M. Turing (1912-1954), whose 1936 +paper laid the foundations for theoretical computer science. In the +paper, Turing presented a simple computational model—now known as a +Turing machine—and argued that any “effective process” can be +formulated as a program for such a machine. (This argument is known as +the Church-Turing thesis.) Turing then implemented a universal +machine, i.e., a Turing machine that behaves as an evaluator for +Turing-machine programs. He used this framework to demonstrate that +there are well-posed problems that cannot be computed by Turing +machines (see [[Exercise 4.15]]), and so by implication cannot be +formulated as “effective processes.” Turing went on to make +fundamental contributions to practical computer science as well. For +example, he invented the idea of structuring programs using +general-purpose subroutines. See Hodges 1983 for a biography of +Turing. +#+END_QUOTE +* <<4.1.6>> Internal Definitions +* <<4.1.7>> Separating Syntatic Analysis from Execution +By separating syntax analysis from execution in ~eval~, we can ensure +we don't need to repeat the expensive analysis step for each +subsequent execution. + +#+BEGIN_SRC scheme + (define (eval exp env) ((analyze exp) env)) +#+END_SRC + +The result of calling ~analyze~ is the execution procedure to be +applied to the environment. The ~analyze~ procedure is the same case +analysis as performed by the original ~eval~ of [[4.1.1]], except that the +procedures to which we dispatch perform only analysis, not full +evaluation: + +#+BEGIN_SRC scheme + (define (analyze exp) + (cond ((self-evaluating? exp) + (analyze-self-evaluating exp)) + ((quoted? exp) + (analyze-quoted exp)) + ((variable? exp) + (analyze-variable exp)) + ((assignment? exp) + (analyze-assignment exp)) + ((definition? exp) + (analyze-definition exp)) + ((if? exp) + (analyze-if exp)) + ((lambda? exp) + (analyze-lambda exp)) + ((begin? exp) + (analyze-sequence + (begin-actions exp))) + ((cond? exp) + (analyze (cond->if exp))) + ((application? exp) + (analyze-application exp)) + (else + (error "Unknown expression + type: ANALYZE" + exp)))) +#+END_SRC + +#+BEGIN_SRC scheme + (define (analyze-self-evaluating exp) + (lambda (env) exp)) + + (define (analyze-quoted exp) + (let ((qval (text-of-quotation exp))) + (lambda (env) qval))) + + (define (analyze-variable exp) + (lambda (env) + (lookup-variable-value exp env))) + + (define (analyze-assignment exp) + (let ((var (assignment-variable exp)) + (vproc (analyze + (assignment-value exp)))) + (lambda (env) + (set-variable-value! + var (vproc env) env) + 'ok))) + + (define (analyze-definition exp) + (let ((var (definition-variable exp)) + (vproc (analyze + (definition-value exp)))) + (lambda (env) + (define-variable! var (vproc env) env) + 'ok))) + + (define (analyze-if exp) + (let ((pproc (analyze (if-predicate exp))) + (cproc (analyze (if-consequent exp))) + (aproc (analyze (if-alternative exp)))) + (lambda (env) + (if (true? (pproc env)) + (cproc env) + (aproc env))))) + + (define (analyze-lambda exp) + (let ((vars (lambda-parameters exp)) + (bproc (analyze-sequence + (lambda-body exp)))) + (lambda (env) + (make-procedure vars bproc env)))) + + (define (analyze-sequence exps) + (define (sequentially proc1 proc2) + (lambda (env) (proc1 env) (proc2 env))) + (define (loop first-proc rest-procs) + (if (null? rest-procs) + first-proc + (loop (sequentially first-proc + (car rest-procs)) + (cdr rest-procs)))) + (let ((procs (map analyze exps))) + (if (null? procs) + (error "Empty sequence: ANALYZE")) + (loop (car procs) (cdr procs)))) + + (define (analyze-application exp) + (let ((fproc (analyze (operator exp))) + (aprocs (map analyze (operands exp)))) + (lambda (env) + (execute-application + (fproc env) + (map (lambda (aproc) (aproc env)) + aprocs))))) + + (define (execute-application proc args) + (cond ((primitive-procedure? proc) + (apply-primitive-procedure proc args)) + ((compound-procedure? proc) + ((procedure-body proc) + (extend-environment + (procedure-parameters proc) + args + (procedure-environment proc)))) + (else (error "Unknown procedure type: + EXECUTE-APPLICATION" + proc)))) +#+END_SRC + +Our new evaluator uses the same data structures, syntax procedures, +and run-time support procedures as in [[4.1.2]], [[4.1.3]], and [[4.1.4]]. diff --git a/4.1-eval-apply.svg b/4.1-eval-apply.svg new file mode 100644 index 0000000..800ad37 --- /dev/null +++ b/4.1-eval-apply.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Eval + Apply + Procedure,Arguments + Expression,Environment + + diff --git a/4.1-lisp.jpg b/4.1-lisp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a74d44847bfc7a55de43c0735cfe3b7a1c7a8e2c GIT binary patch literal 60737 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 literal 0 HcmV?d00001