summaryrefslogtreecommitdiffstats
path: root/ps03_evalapply/repl.scm
diff options
context:
space:
mode:
authorbnewbold <bnewbold@eta.mit.edu>2009-02-24 19:53:41 -0500
committerbnewbold <bnewbold@eta.mit.edu>2009-02-24 19:53:41 -0500
commitdb950ffbdf0cc267e3254255e5d3daefd06392fa (patch)
treef598dc9443c923ba81b1d66b4b498b18625619ab /ps03_evalapply/repl.scm
parent3743c40e8c99d59abd95481848cb9e773a0c1ce4 (diff)
download6.945-db950ffbdf0cc267e3254255e5d3daefd06392fa.tar.gz
6.945-db950ffbdf0cc267e3254255e5d3daefd06392fa.zip
problem set 3 files
Diffstat (limited to 'ps03_evalapply/repl.scm')
-rw-r--r--ps03_evalapply/repl.scm48
1 files changed, 48 insertions, 0 deletions
diff --git a/ps03_evalapply/repl.scm b/ps03_evalapply/repl.scm
new file mode 100644
index 0000000..94a0500
--- /dev/null
+++ b/ps03_evalapply/repl.scm
@@ -0,0 +1,48 @@
+(declare (usual-integrations write write-line pp eval))
+
+(define write
+ (make-generic-operator 1
+ (access write user-initial-environment)))
+
+(define write-line
+ (make-generic-operator 1
+ (access write-line user-initial-environment)))
+
+(define pp
+ (make-generic-operator 1
+ (access pp user-initial-environment)))
+
+(define (procedure-printable-representation procedure)
+ `(compound-procedure
+ ,(procedure-parameters procedure)
+ ,(procedure-body procedure)
+ <procedure-environment>))
+
+(defhandler write
+ (compose write procedure-printable-representation)
+ compound-procedure?)
+
+(defhandler write-line
+ (compose write-line procedure-printable-representation)
+ compound-procedure?)
+
+(defhandler pp
+ (compose pp procedure-printable-representation)
+ compound-procedure?)
+
+
+ (define (read) (prompt-for-command-expression "eval> "))
+
+(define the-global-environment)
+
+(define (init)
+ (set! the-global-environment
+ (extend-environment '() '() the-empty-environment))
+ (repl))
+
+(define (repl)
+ (let ((input (read)))
+ (write-line (eval input the-global-environment))
+ (repl)))
+
+(define go repl)