I think of Outer
like nikie's answer shows. Here's a similar view of Inner
. Think of the arguments in columns. Apply f
to each row and g
to the result.
args = {{a, b, c}, {x, y, z}};
Format[g[e__]] := Column[{g, e},
Dividers -> {None, {False, True, False}}, Alignment -> Center];
Inner[f, Sequence @@ args, g]