4 cell
% field
MalEnv/outer
5 cell
% field
MalEnv/data
8 : MalEnv. { outer
-- env
}
10 outer env
MalEnv/outer
!
11 MalMap/Empty env
MalEnv/data
!
14 : env
/set
{ key
val env -- }
15 key
val env MalEnv/data
@ assoc
18 : env/find
{ key
env -- env-or-0 }
21 dup
0 key rot
MalEnv/data
@ get
( env val-or-0 )
23 MalEnv/outer
@ dup
0= ( env-or-0 done-looping
? )
25 -1 \ found it
! ( env -1 )
30 extend get
{ not
-found key
env -- }
31 key
env env/find
( env-or-0 )
35 not
-found key rot
MalEnv/data
@ get
38 env MalEnv/data
@ pr
-buf
39 a
-space
s" outer: " str
-append
40 env MalEnv/outer
@ ?dup
0= if