Discusión del combinador Y en "The Little Schemer"

Entonces, he pasado mucho tiempo leyendo y releyendo el final del capítulo 9 enEl pequeño intrigante, donde se desarrolla el aplicador Y combinator para ellength función. Creo que mi confusión se reduce a una sola declaración que contrasta dos versiones de longitud (antes de que el combinador se elimine):

<code>A:
  ((lambda (mk-length)
     (mk-length mk-length))
   (lambda (mk-length)
     (lambda (l)
       (cond
         ((null? l) 0 )
         (else (add1
                ((mk-length mk-length)
                 (cdr l))))))))

B:
((lambda (mk-length)
      (mk-length mk-length))
    (lambda (mk-length)
      ((lambda (length)
         (lambda (l)
           (cond
             ((null? l) 0)
             (else (add1 (length (cdr l)))))))
       (mk-length mk-length))))
</code>

Página 170 (4ª ed.) afirma que A

Devuelve una función cuando la aplicamos a un argumento.

mientras que B

no devuelve una función

Produciendo así un retroceso infinito de auto-aplicaciones. Estoy sorprendido por esto. Si B está plagado de este problema, no veo cómo A lo evita.

Respuestas a la pregunta(2)

Su respuesta a la pregunta