1 using System
.Collections
.Generic
;
3 using MalVal
= Mal
.types
.MalVal
;
4 using MalSymbol
= Mal
.types
.MalSymbol
;
5 using MalList
= Mal
.types
.MalList
;
11 Dictionary
<string, MalVal
> data
= new Dictionary
<string, MalVal
>();
13 public Env(Env outer
) {
16 public Env(Env outer
, MalList binds
, MalList exprs
) {
18 for (int i
=0; i
<binds
.size(); i
++) {
19 string sym
= ((MalSymbol
)binds
.nth(i
)).getName();
21 data
[((MalSymbol
)binds
.nth(i
+1)).getName()] = exprs
.slice(i
);
24 data
[sym
] = exprs
.nth(i
);
29 public Env
find(MalSymbol key
) {
30 if (data
.ContainsKey(key
.getName())) {
32 } else if (outer
!= null) {
33 return outer
.find(key
);
39 public MalVal
get(MalSymbol key
) {
42 throw new Mal
.types
.MalException(
43 "'" + key
.getName() + "' not found");
45 return e
.data
[key
.getName()];
49 public Env
set(MalSymbol key
, MalVal
value) {
50 data
[key
.getName()] = value;