A number of languages have listcomps that can do this, and which are actually more useful for this than CL's LOOP macro, but the thing I meant to point at was the APPENDING bit. I guess (loop for x in xs append (loop for y in (f x) collect y)) is awfully similar to [y for x in xs for y in f(x)], though.
Python, for example: def cross(xs, ys): return [[x, y] for y in ys for x in xs]
LOOP in disguise :) (at least to my (very possibly faulty) understanding.)