Esquema / Lisp bucles anidados y recursión

Estoy tratando de resolver un problema en el Esquema que me exige utilizar un bucle anidado o una recursión anidada.

p.ej. Tengo dos listas que tengo que verificar una condición en su producto cartesiano.

¿Cuál es la mejor manera de abordar este tipo de problemas? ¿Algún indicador sobre cómo simplificar este tipo de funciones?

Elaboraré un poco, ya que mi intención podría no ser lo suficientemente clara.

Una función recursiva regular podría verse así:

(define (factorial n)
  (factorial-impl n 1))

(define (factorial-impl n t)
  (if (eq? n 0)
      t
      (factorial-impl (- n 1) (* t n))))

Intentar escribir una función similar pero con una recursión anidada introduce un nuevo nivel de complejidad en el código, y me preguntaba cuál es el patrón básico para este tipo de funciones, ya que puede ser muy feo, muy rápido.

Como ejemplo específico, estoy buscando la forma más fácil de visitar todos los artículos en un producto cartesiano de dos listas.

Respuestas a la pregunta(3)

Su respuesta a la pregunta