% outer binds exprs -> env_new -> new_env /env_new { 3 dict begin %(in env_new\n) print /exprs exch dup _sequential? { /data get }{ pop [ ] } ifelse def /binds exch dup _sequential? { /data get }{ pop [ ] } ifelse def /outer exch def << /__outer__ outer 0 1 binds length 1 sub { /idx exch def binds idx get (&) eq { %if & binds idx 1 add get % key exprs idx exprs length idx sub getinterval % value _list_from_array exit } if binds idx get % key exprs idx get % value } for >> end } def /env_set { % env key value -> put } def /env_get { % env key -> value true OR false { 2 copy known { get true exit } if exch /__outer__ get dup null eq { pop pop false exit } if exch } loop } def