Lisp: ¿Cómo obtener todas las combinaciones posibles de los elementos de las listas contenidas en una lista?

Necesito escribir una función en Common-Lisp que tome una lista de listas y devuelva una lista que contenga todas las combinaciones posibles de los elementos de las sublistas.

Entonces, por ejemplo, llamar a la función en una lista como ((1 2) (1 2)) debería devolver una lista como ((1 1) (1 2) (2 1) (2 2)). La lista de entrada puede ser de cualquier longitud y no se garantiza que las listas secundarias tengan la misma longitud.

Sé cómo obtener esto con elementos emparejados de las sublistas (inputtting ((1 2) (1 2)) devuelve ((1 1) (2 2)), pero eso no es lo suficientemente bueno para el algoritmo de consistencia de arco que soy Tratando de escribir, y estoy atascado.

Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta