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