7 deleted 5 characters in body
source | link
fMap = Distribute[f[#1Flatten[Outer[f[#1, #2], List] & @@ {A, B};, 1]];
n1 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, b, c, d}];
n2 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, y, z}];
fMap = Distribute[f[#1, #2], List] & @@ {A, B};
n1 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, b, c, d}];
n2 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, y, z}];
fMap = Flatten[Outer[f[#1, #2], A, B, 1]];
n1 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, b, c, d}];
n2 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, y, z}];
    Tweeted twitter.com/#!/StackMma/status/249524229484195841
6 deleted 4 characters in body
source | link
Grid[{
    grid1 = 
     Flatten@Insert[n1, ConstantArray["", Length@n2 - 1], 
       Table[{i + 1}, {i, Range[Length@n2 + 1]Range[Length@n1]}]],
    grid2 = Flatten@ConstantArray[n2, Length@n1],
    fMap
    }\[Transpose], Frame -> All];
Grid[{
    grid1 = 
     Flatten@Insert[n1, ConstantArray["", Length@n2 - 1], 
       Table[{i + 1}, {i, Range[Length@n2 + 1]}]],
    grid2 = Flatten@ConstantArray[n2, Length@n1],
    fMap
    }\[Transpose], Frame -> All];
Grid[{
    grid1 = 
     Flatten@Insert[n1, ConstantArray["", Length@n2 - 1], 
       Table[{i + 1}, {i, Range[Length@n1]}]],
    grid2 = Flatten@ConstantArray[n2, Length@n1],
    fMap
    }\[Transpose], Frame -> All];
5 added 737 characters in body
source | link

-- Final edit:

Just incase anyone is interested, here is what I finally went with; it may not be amazingly elegant, but it's sufficient for what I needed. Note that it's actually neccessary to duplicate the expressions into the Unevaluated calls (afaik).

fMap = Distribute[f[#1, #2], List] & @@ {A, B};
n1 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, b, c, d}];
n2 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, y, z}];

I can then create the listing I wanted via

Grid[{
    grid1 = 
     Flatten@Insert[n1, ConstantArray["", Length@n2 - 1], 
       Table[{i + 1}, {i, Range[Length@n2 + 1]}]],
    grid2 = Flatten@ConstantArray[n2, Length@n1],
    fMap
    }\[Transpose], Frame -> All];

-- Final edit:

Just incase anyone is interested, here is what I finally went with; it may not be amazingly elegant, but it's sufficient for what I needed. Note that it's actually neccessary to duplicate the expressions into the Unevaluated calls (afaik).

fMap = Distribute[f[#1, #2], List] & @@ {A, B};
n1 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, b, c, d}];
n2 = SymbolName@Unevaluated[#] & /@ 
   Unevaluated /@ Unevaluated[{x, y, z}];

I can then create the listing I wanted via

Grid[{
    grid1 = 
     Flatten@Insert[n1, ConstantArray["", Length@n2 - 1], 
       Table[{i + 1}, {i, Range[Length@n2 + 1]}]],
    grid2 = Flatten@ConstantArray[n2, Length@n1],
    fMap
    }\[Transpose], Frame -> All];
4 added 794 characters in body
source | link
3 added 794 characters in body
source | link
2 clarified
source | link
1
source | link