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.