Dyskusja Y combinator w „The Little Schemer”

Tak więc spędziłem dużo czasu czytając i ponownie czytając zakończenie rozdziału 9 wMały Schemer, gdzie opracowano odpowiedni kombinator Y dlalength funkcjonować. Myślę, że moje zamieszanie sprowadza się do pojedynczego stwierdzenia, które kontrastuje dwie wersje długości (zanim uwzględni się kombinator):

<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>

Strona 170 (4. ed.) stwierdza, że ​​A

zwraca funkcję, gdy zastosowaliśmy ją do argumentu

podczas gdy B

nie zwraca funkcji

wytwarzając w ten sposób nieskończony regres aplikacji własnych. Jestem przez to zakłopotany. Jeśli B jest nękany przez ten problem, nie widzę, jak A go unika.

questionAnswers(2)

yourAnswerToTheQuestion