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.