anchor.diff:      Eval = fun(S) -> eval_gexpr(S, Env) end,
       eval_bitsegs(Vsps, Eval).
   
  +%% gmap_pairs(Args, Env) -> [{K,V}].
  +
  +gmap_pairs([K,V|As], Env) ->
  +    Key = map_key(K),                           %Evaluate the key
  +    [{Key,eval_gexpr(V, Env)}|gmap_pairs(As, Env)];
  +gmap_pairs([], _) -> [];
  +gmap_pairs(_, _) -> erlang:error(badarg).
  +
   %% eval_gif(IfBody, Env) -> Val.
   
   eval_gif([Test,True], Env) ->
  
positive.code:     if P == Val -> {yes,Pbs};
         true -> no
      end;
  match([cons,H,T], [V|Vs], Pbs0, Env) ->        %Explicit cons constructor
      case match(H, V, Pbs0, Env) of
          {yes,Pbs1} -> match(T, Vs, Pbs1, Env);
          no -> no
      end;
  match([list|Ps], Val, Pbs, Env) ->        %Explicit list constructor
      match_list(Ps, Val, Pbs, Env);
  match([tuple|Ps], Val, Pbs, Env) ->
      %% io:fwrite("~p ~p\n", [Ps,Val]),
  
negative.code: eval_gexpr([list|Es], Env) -> eval_glist(Es, Env);
  eval_gexpr([tuple|Es], Env) -> list_to_tuple(eval_glist(Es, Env));
  eval_gexpr([binary|Bs], Env) -> eval_gbinary(Bs, Env);
  eval_gexpr([map|As], Env) ->
      KVs = gmap_pairs(As, Env),
      maps:from_list(KVs);
  eval_gexpr(['get-map',Map,K], Env) ->
      Key = map_key(K),
      maps:get(Key, eval_gexpr(Map, Env));
  eval_gexpr(['set-map',Map|As], Env) ->
      KVs = gmap_pairs(As, Env),
      foldl(fun ({K,V}, M) -> maps:put(K, V, M) end,
            eval_gexpr(Map, Env), KVs);
  eval_gexpr(['update-map',Map|As], Env) ->
      KVs = gmap_pairs(As, Env),
      foldl(fun ({K,V}, M) -> maps:update(K, V, M) end,
            eval_gexpr(Map, Env), KVs);
  %% Handle the Core closure special forms.
  %% Handle the control special forms.
  eval_gexpr(['progn'|Body], Env) -> eval_gbody(Body, Env);
  