File tree Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change
1
+ ; a more efficient eval
2
+
3
+ (define (seck-eval exp env )
4
+ ((analyze exp) env))
5
+
6
+ (define (analyze exp )
7
+ (cond ((self-evaluating? exp)
8
+ (analyze-self-evaluating exp))
9
+ ((quoted? exp) (analyze-quoted exp))
10
+ ((variable? exp) (analyze-variable exp))
11
+ ((assignment? exp) (analyze-assignment exp))
12
+ ((definition? exp) (analyze-definition exp))
13
+ ((if? exp) (analyze-if exp))
14
+ ((lambda? exp) (analyze-lambda exp))
15
+ ((begin? exp) (analyze-sequence (begin-actions exp)))
16
+ ((cond? exp) (analyze (cond->if exp)))
17
+ ((application? exp) (analyze-application exp))
18
+ (else
19
+ (error 'analyze " unknown expression type" exp))))
20
+
21
+ (define (analyze-self-evaluating exp )
22
+ (lambda (env ) exp))
23
+
24
+ (define (analyze-quoted exp )
25
+ (let ((qval (text-of-quotation exp)))
26
+ (lambda (env ) qval)))
27
+
28
+ (define (analyze-quoted exp )
You can’t perform that action at this time.
0 commit comments