aboutsummaryrefslogtreecommitdiff
path: root/HW05a.scm
diff options
context:
space:
mode:
Diffstat (limited to 'HW05a.scm')
-rw-r--r--HW05a.scm48
1 files changed, 48 insertions, 0 deletions
diff --git a/HW05a.scm b/HW05a.scm
new file mode 100644
index 0000000..869ceec
--- /dev/null
+++ b/HW05a.scm
@@ -0,0 +1,48 @@
+#lang eopl
+
+;; HW05a - Environments
+;; Part 1: Procedural Implementation
+;;
+;; CSI-310 Programming Languages
+;; Due: 2013-02-25
+;; Name: Ben Burwell
+
+;; empty environment
+(define empty-env
+ (lambda ()
+ (lambda (sym) (eopl:error 'apply-env "No binding for ~s" sym))))
+
+;; helpers
+(define in-sym-list
+ (lambda (item lst)
+ (cond
+ [ (equal? (length lst) 0) #f ]
+ [ (equal? (caar lst) item) #t ]
+ [ else (in-sym-list item (cdr lst)) ]
+ )))
+
+(define get-val
+ (lambda (sym lst)
+ (cond
+ [ (equal? (length lst) 0) 'err ]
+ [ (equal? (caar lst) sym) (cadar lst) ]
+ [ else (get-val sym (cdr lst)) ]
+ )))
+
+;; extend environment
+(define extend-env
+ (lambda (sym-val-lst env)
+ (lambda (sym)
+ (if (in-sym-list sym sym-val-lst)
+ (get-val sym sym-val-lst)
+ (apply-env env sym)))))
+
+;; apply environment
+(define apply-env
+ (lambda (env sym)
+ (env sym)))
+
+;; tests
+(apply-env (extend-env '((a 5) (b 9)) (extend-env '((a 1) (b 2) (c 3)) (empty-env))) 'a)
+(apply-env (extend-env '((a 5) (b 9)) (extend-env '((a 1) (b 2) (c 3)) (empty-env))) 'b)
+(apply-env (extend-env '((a 5) (b 9)) (extend-env '((a 1) (b 2) (c 3)) (empty-env))) 'c) \ No newline at end of file