From 5b05b64a2a658c0f7d4eb5b09fa342c7375a776e Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Thu, 11 Apr 2013 00:03:50 -0400 Subject: Init --- HW05a_rib.scm | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 HW05a_rib.scm (limited to 'HW05a_rib.scm') 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 -- cgit v1.2.3