Cartesian product of two tables.
Computes the Cartesian product of two tables. The Cartesian product is each row in A combined with each row in B.
Due to the definition and structural constraints of table, the two inputs must have no variable names in common. It is an error if they do.
The Cartesian product is seldom used in practice. If you find yourself calling this method, you should step back and re-evaluate what you are doing, asking yourself if that is really what you want to happen. If nothing else, writing a function that calls cartesian() is usually much less efficient than alternate ways of arriving at the same result.
This implementation does not remove duplicate values. TODO: Determine whether this duplicate-removing behavior is correct.
The ordering of the rows in the output is not specified, and may be implementation- dependent. TODO: Determine if we can lock this behavior down to a fixed, defined ordering, without killing performance.