diff options
author | Ben Burwell <bburwell1@gmail.com> | 2013-04-11 00:03:50 -0400 |
---|---|---|
committer | Ben Burwell <bburwell1@gmail.com> | 2013-04-11 00:03:50 -0400 |
commit | 5b05b64a2a658c0f7d4eb5b09fa342c7375a776e (patch) | |
tree | bad4537081da8b969084cff6880e36418f13a97d /HW05a_rib.scm |
Init
Diffstat (limited to 'HW05a_rib.scm')
-rw-r--r-- | HW05a_rib.scm | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/HW05a_rib.scm b/HW05a_rib.scm new file mode 100644 index 0000000..e057a8e --- /dev/null +++ b/HW05a_rib.scm @@ -0,0 +1,50 @@ +#lang eopl + +;; HW05a - Environments +;; Part 3: Rib-Cage Implementation +;; +;; CSI-310 Programming Languages +;; Due: 2013-02-25 +;; Name: Ben Burwell + +;; empty environment +(define empty-env + (lambda () '(()) + )) + +;; extend environment +(define extend-env + (lambda (sym-val-lst env) + (cons sym-val-lst env))) + +;; helper +(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)) ] + ))) + +;; apply environment +(define apply-env + (lambda (env sym) + (cond + [ (in-sym-list? sym (car env)) (get-val sym (car env)) ] + [ (equal? (length (car env)) 0) (eopl:error "No binding for" sym) ] + [ else (apply-env (cdr 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 |