anchor.diff:  %%% Parses a top-level S-expression and converts it to an abstract syntax
   %%% tree (AST).
   %%%
  +%%% Notes:
  +%%% - Variadic functions (with "rest" parameters) are not supported, since
  +%%%   they mess up calling conventions and interoperability with Erlang.
  +%%%
   %%% Extensions:
   %%% - (lambda M:F/A) evaluates to the function F of arity A exported from module M,
   %%%   M, F, and A are all evaluated except that if M or F are unbound variables, they
  
positive.code:     [Pred, Then, Else] ->
        {'ES:IF', parse(Pred, Env), parse(Then, Env), parse(Else, Env)};
      [Pred, Then] ->
        {'ES:IF', parse(Pred, Env), parse(Then, Env), {'ES:QUOTE', []}}; % XXX: #!undefined
      _ ->
        erlang:throw({bad_if, Tl})
    end.
  
negative.code:       parse(Expr, Env, IsToplevel);
      [Expr | Rest] ->
        {'ES:SEQ', parse(Expr, Env, IsToplevel), parse_begin(Rest, Env, IsToplevel)};
      [] when IsToplevel ->       % (begin) is valid at the top-level
        {'EQ:QUOTE', []};         % TODO: #!undefined
      _ ->
        erlang:throw({bad_begin, Tl})
    end.
  