Again, L stands for any list of numbers we can think of in these examples. Otherwise, it doesn't even make sense to replace empty with the second argument. The second argument is treated as it were an atomic piece of data. Let's fill the gaps in the template, following the design recipe and using our examples. We can combine 2 and the latter with cons and can thus obtain the desired result.
Figure contains the complete definition.
Develop cross . The function consumes a list of symbols and a list of numbers and produces all possible pairs of symbols and numbers.