anchor.diff:  -module(lfe_eval).
   
   -export([expr/1,expr/2,gexpr/1,gexpr/2,apply/2,apply/3,
  -     body/1,body/2,guard/1,guard/2,
  -     make_letrec_env/2,add_expr_func/4,match/3,match_when/4]).
  +         body/1,body/2,guard/1,guard/2,match/3,match_when/4,
  +         make_letrec_env/2,add_lexical_func/4,add_dynamic_func/4]).
   
   %% Deprecated exports.
   -export([eval/1,eval/2,eval_list/2]).
  
positive.code: extend_letrec_env(Lete0, Fbs0, Env0) ->
      {Lete0,Env0}.
  
  %% add_expr_func(Name, Arity, Def, Env) -> Env.
  %%  Add a function definition in the correct format to the
  %%  environment.
  
  add_expr_func(Name, Ar, Def, Env) ->
      add_fbinding(Name, Ar, {lexical_expr,Def,Env}, Env).
  
  %% eval_apply(Function, Args, Env) -> Value.
  %%  This is used to evaluate interpreted functions. Macros are
  %%  expanded completely in the function definition before it is
  %%  applied.
  
  eval_apply({dynamic_expr,Func}, Es, Env) ->
      eval_apply_expr(Func, Es, Env);
  eval_apply({lexical_expr,Func,Env}, Es, _) ->
      eval_apply_expr(Func, Es, Env);
  eval_apply({letrec,Body,Fbs,Env}, Es, _) ->
      %% A function created by/for letrec-function.
      NewEnv = foldl(fun ({V,Ar,Lambda}, E) ->
                 add_fbinding(V, Ar, {letrec,Lambda,Fbs,Env}, E)
             end, Env, Fbs),
      %% io:fwrite("la: ~p\n", [{Body,NewEnv}]),
      eval_apply_expr(Body, Es, NewEnv).
  
  
negative.code: 
  eval_case_clauses(V, Cls, Env) ->
      case match_clause(V, Cls, Env) of
          {yes,B,Vbs} -> eval_body(B, add_vbindings(Vbs, Env));
          no -> erlang:error({case_clause,V})
      end.
  
  match_clause(V, [[Pat|B0]|Cls], Env) ->
  