anchor.diff:  
   -import(lists, [map/2,foldl/3,mapfoldl/3,foldr/3,splitwith/2]).
   
  --import(ordsets, [add_element/2,is_element/2,intersection/2]).
  --import(orddict, [store/3,is_key/2,find/2]).
  -
   -define(Q(E), [quote,E]).			%We do a lot of quoting
   
  --record(fstate, {vc=0				%Variable counter
  -		}).
  +-record(from, {vc=0				%Variable counter
  +	      }).
   
   %% from_expr(AST) -> Sexpr.
   %% from_expr(AST, Variables) -> {Sexpr,Variables}.
  
positive.code: 
  from_lit_list(Es) -> [ from_lit(E) || E <- Es ].
  
  -record(tstate, {vc=0				%Variable counter
  		}).
  
  to_expr(E, L) ->
      {Le,_} = to_expr(E, L, [], #tstate{}),
      Le.
  
  %% to_expr(Expr, LineNumber, VarTable, State) -> {Expr,State}.
  
negative.code: from_pat({match,_,P1,P2}, Vt0, St0) ->		%Aliases
      {Lp1,Eqt1,Vt1,St1} = from_pat(P1, Vt0, St0),
      {Lp2,Eqt2,Vt2,St2} = from_pat(P2, Vt1, St1),
      {['=',Lp1,Lp2],Eqt1++Eqt2,Vt2,St2};
  %% Basically illegal syntax which maybe generated by internal tools.
  from_pat({call,_,{atom,_,F},As}, Vt0, St0) ->
      %% This will never occur in real code but for macro expansions.
      {Las,Eqt,Vt1,St1} = from_pat_list(As, Vt0, St0),
      {[F|Las],Eqt,Vt1,St1}.
  
  from_pat_list([P|Ps], Vt0, St0) ->
      {Lp,Eqt,Vt1,St1} = from_pat(P, Vt0, St0),
  