En Scheme, ¿cómo utiliza lambda para crear una función recursiva?

Estoy en una clase de Scheme y tenía curiosidad por escribir una función recursiva sin usar define. El principal problema, por supuesto, es que no puede llamar a una función dentro de sí misma si no tiene un nombre.

Encontré este ejemplo: es un generador factorial que usa solo lambda.

((lambda (x) (x x))
 (lambda (fact-gen)
   (lambda (n)
     (if (zero? n)
         1
         (* n ((fact-gen fact-gen) (sub1 n)))))))

Pero ni siquiera puedo entender la primera llamada, (lambda (x) (x x)): ¿Qué hace exactamente eso? ¿Y dónde ingresa el valor del que desea obtener el factorial?

Esto no es para la clase, esto es solo por curiosidad.

Respuestas a la pregunta(8)

Su respuesta a la pregunta